PinoLogger
A Logger instance is created using new PinoLogger()
and provides methods to record events at various severity levels.
When deploying to Mastra Cloud, logs are displayed on the Logs page. In self-hosted or custom environments, logs can be directed to files or external services depending on the configured transports.
Usage example
import { Mastra } from '@mastra/core/mastra';
import { PinoLogger } from '@mastra/loggers';
export const mastra = new Mastra({
// ...
logger: new PinoLogger({
name: 'Mastra',
level: 'info',
}),
});
Parameters
name:
level:
transports:
overrideDefaultTransports?:
formatters?:
File transport (structured logs)
Writes structured logs to a file using the FileTransport
. The logger accepts a plain message as the first argument and structured metadata as the second argument. These are internally converted to a BaseLogMessage
and persisted to the configured file path.
import { FileTransport } from "@mastra/loggers/file";
import { PinoLogger } from "@mastra/loggers/pino";
export const fileLogger = new PinoLogger({
name: "Mastra",
transports: { file: new FileTransport({ path: "test-dir/test.log" }) },
level: "warn",
});
File transport usage
fileLogger.warn("Low disk space", {
destinationPath: "system",
type: "WORKFLOW",
});
Upstash transport (remote log drain)
Streams structured logs to a remote Redis list using the UpstashTransport
. The logger accepts a string message and a structured metadata object. This enables centralized logging for distributed environments, supporting filtering by destinationPath
, type
, and runId
.
import { UpstashTransport } from "@mastra/loggers/upstash";
import { PinoLogger } from "@mastra/loggers/pino";
export const upstashLogger = new PinoLogger({
name: "Mastra",
transports: {
upstash: new UpstashTransport({
listName: "production-logs",
upstashUrl: process.env.UPSTASH_URL!,
upstashToken: process.env.UPSTASH_TOKEN!,
}),
},
level: "info",
});
Upstash transport usage
upstashLogger.info("User signed in", {
destinationPath: "auth",
type: "AGENT",
runId: "run_123",
});
Custom transport
You can create custom transports using the createCustomTransport
utility to integrate with any logging service or stream.
Sentry transport example
Creates a custom transport using createCustomTransport
and integrates it with a third-party logging stream such as pino-sentry-transport
. This allows forwarding logs to an external system like Sentry for advanced monitoring and observability.
import { createCustomTransport } from "@mastra/core/loggers";
import { PinoLogger } from "@mastra/loggers/pino";
import pinoSentry from "pino-sentry-transport";
const sentryStream = await pinoSentry({
sentry: {
dsn: "YOUR_SENTRY_DSN",
_experiments: {
enableLogs: true,
},
},
});
const customTransport = createCustomTransport(sentryStream);
export const sentryLogger = new PinoLogger({
name: "Mastra",
level: "info",
transports: { sentry: customTransport },
});