PinoLogger
Logger インスタンスは new PinoLogger() で作成し、各重大度レベルでイベントを記録するメソッドを提供します。
使用例使用例への直接リンク
import { Mastra } from '@mastra/core'
import { PinoLogger } from '@mastra/loggers'
export const mastra = new Mastra({
logger: new PinoLogger({
name: 'Mastra',
level: 'info',
}),
})
パラメータパラメータへの直接リンク
name:
level:
transports:
overrideDefaultTransports?:
formatters?:
redact?:
redact)。prettyPrint?:
pino-pretty を無効にして生の JSON 行を書き込みます(ログ集約サービスに便利です)。mixin?:
traceId やその他の共有メタデータなど)。customLevels?:
debug、info、warn、error で記録され、追加レベルは Pino のカスタムレベルの動作に従います。mixin によるログの拡充log-enrichment-with-mixinへの直接リンク
すべての行に同じ構造化フィールドを追加し、他のサービスと関連付けるには mixin を使用します。
import { Mastra } from '@mastra/core'
import { PinoLogger } from '@mastra/loggers'
function getTraceContext() {
return { traceId: 'abc-123' }
}
export const mastra = new Mastra({
logger: new PinoLogger({
name: 'Mastra',
level: 'info',
mixin() {
return getTraceContext()
},
}),
})
カスタムレベルカスタムレベルへの直接リンク
customLevels はそのまま Pino に渡されます。PinoLogger が公開するのは debug、info、warn、error のみです。追加のレベル名(audit など)を使用するには、サブクラスを作成して基盤となる Pino インスタンスへ転送します。
import { Mastra } from '@mastra/core'
import { PinoLogger } from '@mastra/loggers'
type AuditLevel = 'audit'
class MastraPinoWithAudit extends PinoLogger<AuditLevel> {
audit(message: string, meta: Record<string, unknown> = {}) {
this.logger.audit(meta, message)
}
}
const logger = new MastraPinoWithAudit({
name: 'Mastra',
level: 'info',
customLevels: { audit: 35 },
})
export const mastra = new Mastra({ logger })
数値は Pino の順序に従います(組み込みレベルでは10から60を使用)。35 は info(30)と warn(40)の間にあるため、level: 'info' では info と audit の両方の行が出力されます。
File transport(構造化ログ)File transport(構造化ログ)への直接リンク
FileTransport を使用して構造化ログをファイルに書き込みます。logger は第1引数にプレーンなメッセージ、第2引数に構造化メタデータを受け取ります。これらは内部で BaseLogMessage に変換され、設定されたファイルパスに永続化されます。
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 の使用方法File transport の使用方法への直接リンク
fileLogger.warn('Low disk space', {
destinationPath: 'system',
type: 'WORKFLOW',
})
Upstash transport(リモートログ転送)Upstash transport(リモートログ転送)への直接リンク
UpstashTransport を使用して、構造化ログをリモートの Redis list にストリーミングします。logger は文字列メッセージと構造化メタデータオブジェクトを受け取ります。分散環境でログを一元管理し、destinationPath、type、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 の使用方法Upstash transport の使用方法への直接リンク
upstashLogger.info('User signed in', {
destinationPath: 'auth',
type: 'AGENT',
runId: 'run_123',
})
カスタム transportカスタム transportへの直接リンク
createCustomTransport ユーティリティを使用すると、任意のログサービスやストリームと連携するカスタム transport を作成できます。
Sentry transport の例Sentry transport の例への直接リンク
createCustomTransport でカスタム transport を作成し、pino-sentry-transport などのサードパーティ製ログストリームと連携します。これにより、高度な監視と Observability のためにログを Sentry などの外部システムへ転送できます。
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 },
})