import type { MastraError } from '../error/index.js';
import type { LoggerContext } from '../observability/types/logging.js';
import type { LogLevel } from './constants.js';
import type { IMastraLogger } from './logger.js';
import type { BaseLogMessage, LoggerTransport } from './transport.js';
/**
 * A transparent wrapper around IMastraLogger that also forwards log calls
 * to a LoggerContext (loggerVNext) for observability dual-write.
 *
 * All existing `this.logger.info(...)` call sites automatically get
 * dual-write when this wrapper is injected via `__setLogger()`.
 *
 * Span-aware: when called inside an executeWithContext() scope, forwards to
 * a span-correlated loggerVNext (with traceId/spanId). Otherwise falls back
 * to the global loggerVNext (no correlation, still persisted to storage).
 *
 * Uses a lazy getter function for loggerVNext so it always resolves the
 * current LoggerContext at call time (observability may initialize after the logger).
 */
export declare class DualLogger implements IMastraLogger {
    #private;
    constructor(inner: IMastraLogger, getLoggerVNext?: () => LoggerContext | undefined);
    /**
     * Set or update the loggerVNext getter.
     * Called after observability initializes (which may happen after logger creation).
     */
    setLoggerVNext(getLoggerVNext: (() => LoggerContext | undefined) | undefined): void;
    debug(message: string, ...args: any[]): void;
    info(message: string, ...args: any[]): void;
    warn(message: string, ...args: any[]): void;
    error(message: string, ...args: any[]): void;
    trackException(error: MastraError, metadata?: Record<string, unknown>): void;
    getTransports(): Map<string, LoggerTransport>;
    listLogs(transportId: string, params?: {
        fromDate?: Date;
        toDate?: Date;
        logLevel?: LogLevel;
        filters?: Record<string, any>;
        page?: number;
        perPage?: number;
    }): Promise<{
        logs: BaseLogMessage[];
        total: number;
        page: number;
        perPage: number;
        hasMore: boolean;
    }>;
    listLogsByRunId(args: {
        transportId: string;
        runId: string;
        fromDate?: Date;
        toDate?: Date;
        logLevel?: LogLevel;
        filters?: Record<string, any>;
        page?: number;
        perPage?: number;
    }): Promise<{
        logs: BaseLogMessage[];
        total: number;
        page: number;
        perPage: number;
        hasMore: boolean;
    }>;
}
//# sourceMappingURL=dual-logger.d.ts.map