PinoLogger
Loggerインスタンスはnew PinoLogger()
を使用して作成され、様々な重要度レベルでイベントを記録するメソッドを提供します。
Mastra Cloudにデプロイする際、ログはLogsページに表示されます。セルフホストまたはカスタム環境では、設定されたトランスポートに応じて、ログをファイルや外部サービスに送信できます。
使用例
src/mastra/index.ts
import { Mastra } from '@mastra/core/mastra';
import { PinoLogger } from '@mastra/loggers';
export const mastra = new Mastra({
// ...
logger: new PinoLogger({
name: 'Mastra',
level: 'info',
}),
});
パラメータ
name:
string
このロガーからのログをグループ化し、識別するために使用されるラベル。
level:
"debug" | "info" | "warn" | "error"
最小ログレベルを設定します。このレベル以下のメッセージは無視されます。
transports:
Record<string, LoggerTransport>
ログを永続化するために使用されるトランスポートインスタンスのマップ。
overrideDefaultTransports?:
boolean
trueの場合、デフォルトのコンソールトランスポートを無効にします。
formatters?:
pino.LoggerOptions['formatters']
ログのシリアライゼーション用のカスタムPinoフォーマッター。
ファイルトランスポート(構造化ログ)
FileTransport
を使用して構造化ログをファイルに書き込みます。ロガーは最初の引数としてプレーンメッセージを受け取り、2番目の引数として構造化メタデータを受け取ります。これらは内部的にBaseLogMessage
に変換され、設定されたファイルパスに永続化されます。
src/mastra/loggers/file-transport.ts
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",
});
ファイルトランスポートの使用方法
fileLogger.warn("Low disk space", {
destinationPath: "system",
type: "WORKFLOW",
});
Upstash transport (リモートログドレイン)
UpstashTransport
を使用して、構造化されたログをリモートのRedisリストにストリーミングします。ロガーは文字列メッセージと構造化されたメタデータオブジェクトを受け取ります。これにより、分散環境での集中ログ管理が可能になり、destinationPath
、type
、runId
によるフィルタリングをサポートします。
src/mastra/loggers/upstash-transport.ts
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の使用方法
upstashLogger.info("User signed in", {
destinationPath: "auth",
type: "AGENT",
runId: "run_123",
});
カスタムトランスポート
createCustomTransport
ユーティリティを使用してカスタムトランスポートを作成し、任意のロギングサービスやストリームと統合できます。
Sentryトランスポートの例
createCustomTransport
を使用してカスタムトランスポートを作成し、pino-sentry-transport
などのサードパーティロギングストリームと統合します。これにより、高度な監視と可観測性のためにSentryなどの外部システムにログを転送できます。
src/mastra/loggers/sentry-transport.ts
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 },
});