{"version":3,"file":"index.cjs","names":["#inner","#getLoggerVNext","#forwardToVNext","#resolveLoggerVNext","resolveCurrentSpan","ConsoleLogger"],"sources":["../../src/logger/multi-logger.ts","../../src/logger/dual-logger.ts","../../src/logger/noop-logger.ts","../../src/logger/default-logger.ts"],"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"],"mappings":"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"}