@mastra/core
Version:
1 lines • 15 kB
Source Map (JSON)
{"version":3,"sources":["../src/logger/multi-logger.ts","../src/logger/dual-logger.ts","../src/logger/noop-logger.ts","../src/logger/default-logger.ts"],"names":["resolveCurrentSpan","ConsoleLogger"],"mappings":"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","file":"chunk-LVFNMIWO.cjs","sourcesContent":["import type { MastraError } from '../error';\nimport type { LogLevel } from './constants';\nimport type { IMastraLogger } from './logger';\nimport type { LoggerTransport } from './transport';\n\nexport class MultiLogger implements IMastraLogger {\n private loggers: IMastraLogger[];\n\n constructor(loggers: IMastraLogger[]) {\n this.loggers = loggers;\n }\n\n debug(message: string, ...args: any[]): void {\n this.loggers.forEach(logger => logger.debug(message, ...args));\n }\n\n info(message: string, ...args: any[]): void {\n this.loggers.forEach(logger => logger.info(message, ...args));\n }\n\n warn(message: string, ...args: any[]): void {\n this.loggers.forEach(logger => logger.warn(message, ...args));\n }\n\n error(message: string, ...args: any[]): void {\n this.loggers.forEach(logger => logger.error(message, ...args));\n }\n\n trackException(error: MastraError, metadata?: Record<string, unknown>): void {\n this.loggers.forEach(logger => logger.trackException(error, metadata));\n }\n\n getTransports(): Map<string, LoggerTransport> {\n const transports: [string, LoggerTransport][] = [];\n this.loggers.forEach(logger => transports.push(...logger.getTransports().entries()));\n return new Map(transports);\n }\n\n async listLogs(\n transportId: string,\n params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n returnPaginationResults?: boolean;\n page?: number;\n perPage?: number;\n },\n ) {\n for (const logger of this.loggers) {\n const logs = await logger.listLogs(transportId, params);\n if (logs.total > 0) {\n return logs;\n }\n }\n\n return { logs: [], total: 0, page: params?.page ?? 1, perPage: params?.perPage ?? 100, hasMore: false };\n }\n\n async listLogsByRunId(args: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }) {\n for (const logger of this.loggers) {\n const logs = await logger.listLogsByRunId(args);\n if (logs.total > 0) {\n return logs;\n }\n }\n\n return { logs: [], total: 0, page: args.page ?? 1, perPage: args.perPage ?? 100, hasMore: false };\n }\n}\n","import type { MastraError } from '../error';\nimport type { LoggerContext } from '../observability/types/logging';\nimport { resolveCurrentSpan } from '../observability/utils';\nimport type { LogLevel } from './constants';\nimport type { IMastraLogger } from './logger';\nimport type { BaseLogMessage, LoggerTransport } from './transport';\n\n/**\n * A transparent wrapper around IMastraLogger that also forwards log calls\n * to a LoggerContext (loggerVNext) for observability dual-write.\n *\n * All existing `this.logger.info(...)` call sites automatically get\n * dual-write when this wrapper is injected via `__setLogger()`.\n *\n * Span-aware: when called inside an executeWithContext() scope, forwards to\n * a span-correlated loggerVNext (with traceId/spanId). Otherwise falls back\n * to the global loggerVNext (no correlation, still persisted to storage).\n *\n * Uses a lazy getter function for loggerVNext so it always resolves the\n * current LoggerContext at call time (observability may initialize after the logger).\n */\nexport class DualLogger implements IMastraLogger {\n #inner: IMastraLogger;\n #getLoggerVNext: (() => LoggerContext | undefined) | undefined;\n\n constructor(inner: IMastraLogger, getLoggerVNext?: () => LoggerContext | undefined) {\n this.#inner = inner;\n this.#getLoggerVNext = getLoggerVNext;\n }\n\n /**\n * The wrapped underlying logger, without the observability dual-write layer.\n * Use this when forwarding a logger to observability to avoid recursing back\n * through the dual-write path.\n */\n get baseLogger(): IMastraLogger {\n return this.#inner;\n }\n\n /**\n * Set or update the loggerVNext getter.\n * Called after observability initializes (which may happen after logger creation).\n */\n setLoggerVNext(getLoggerVNext: (() => LoggerContext | undefined) | undefined): void {\n this.#getLoggerVNext = getLoggerVNext;\n }\n\n debug(message: string, ...args: any[]): void {\n this.#inner.debug(message, ...args);\n this.#forwardToVNext('debug', message, args);\n }\n\n info(message: string, ...args: any[]): void {\n this.#inner.info(message, ...args);\n this.#forwardToVNext('info', message, args);\n }\n\n warn(message: string, ...args: any[]): void {\n this.#inner.warn(message, ...args);\n this.#forwardToVNext('warn', message, args);\n }\n\n error(message: string, ...args: any[]): void {\n this.#inner.error(message, ...args);\n this.#forwardToVNext('error', message, args);\n }\n\n trackException(error: MastraError, metadata?: Record<string, unknown>): void {\n this.#inner.trackException(error, metadata);\n try {\n const loggerVNext = this.#resolveLoggerVNext();\n loggerVNext?.error(error.message, {\n errorId: error.id,\n domain: error.domain,\n category: error.category,\n details: error.details,\n cause: error.cause?.message,\n ...metadata,\n });\n } catch {\n // Never let loggerVNext errors break the primary logger\n }\n }\n\n getTransports(): Map<string, LoggerTransport> {\n return this.#inner.getTransports();\n }\n\n async listLogs(\n transportId: string,\n params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ): Promise<{ logs: BaseLogMessage[]; total: number; page: number; perPage: number; hasMore: boolean }> {\n return this.#inner.listLogs(transportId, params);\n }\n\n async listLogsByRunId(args: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{ logs: BaseLogMessage[]; total: number; page: number; perPage: number; hasMore: boolean }> {\n return this.#inner.listLogsByRunId(args);\n }\n\n /**\n * Resolve the best available LoggerContext:\n * 1. Span-correlated loggerVNext from AsyncLocalStorage (has traceId/spanId)\n * 2. Global loggerVNext from the lazy getter (no correlation, still persisted)\n */\n #resolveLoggerVNext(): LoggerContext | undefined {\n // Check for a span in async context (set by executeWithContext)\n const span = resolveCurrentSpan();\n if (span) {\n const correlated = span.observabilityInstance?.getLoggerContext?.(span);\n if (correlated) return correlated;\n }\n\n // Fall back to global loggerVNext (no trace correlation)\n return this.#getLoggerVNext?.();\n }\n\n /**\n * Adapt IMastraLogger's variadic args to LoggerContext's structured data param.\n * Extracts the first plain object as `data`, serializes Error args, and\n * collects any remaining primitives so the dual write preserves all context.\n */\n #forwardToVNext(level: 'debug' | 'info' | 'warn' | 'error', message: string, args: any[]): void {\n try {\n const loggerVNext = this.#resolveLoggerVNext();\n if (!loggerVNext) return;\n\n const objectData = args.find(\n (arg): arg is Record<string, unknown> =>\n arg !== null && typeof arg === 'object' && !Array.isArray(arg) && !(arg instanceof Error),\n );\n const errorArg = args.find((arg): arg is Error => arg instanceof Error);\n const extraArgs = args.filter(arg => arg !== objectData && arg !== errorArg);\n\n loggerVNext[level](message, {\n ...(objectData ?? {}),\n ...(errorArg\n ? {\n error: {\n name: errorArg.name,\n message: errorArg.message,\n stack: errorArg.stack,\n },\n }\n : {}),\n ...(extraArgs.length > 0 ? { args: extraArgs } : {}),\n });\n } catch {\n // Never let loggerVNext errors break the primary logger\n }\n }\n}\n","import type { IMastraLogger } from './logger';\n\nexport const noopLogger = {\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n cleanup: async () => {},\n getTransports: () => new Map(),\n trackException: () => {},\n listLogs: async () => ({ logs: [], total: 0, page: 1, perPage: 100, hasMore: false }),\n listLogsByRunId: async () => ({ logs: [], total: 0, page: 1, perPage: 100, hasMore: false }),\n} as IMastraLogger;\n","import { ConsoleLogger } from '@internal/core/logger';\nimport type { LogLevel, LoggerTransport } from '@internal/core/logger';\n\nexport const createLogger = (options: {\n name?: string;\n level?: LogLevel;\n transports?: Record<string, LoggerTransport>;\n}) => {\n const logger = new ConsoleLogger(options);\n\n logger.warn('createLogger is deprecated. Please use \"new ConsoleLogger()\" from \"@mastra/core/logger\" instead.');\n\n return logger;\n};\n\nexport { ConsoleLogger, type ConsoleLoggerOptions, type LogFilter, type LogFilterContext } from '@internal/core/logger';\n"]}