import type { Provider } from '../di';
import { type Logger as PinoLogger } from 'pino';
export type LogData = Record<string, unknown>;
export declare enum LoggerLevel {
    none = 0,
    alert = 1,
    error = 2,
    warning = 3,
    log = 4,
    info = 5,
    debug = 6,
    debug2 = 7
}
export interface LogEntry {
    level: LoggerLevel;
    levelName: keyof typeof LoggerLevel;
    scope?: string;
    message: string;
    data?: LogData;
    error?: unknown;
    timestamp: Date;
}
export type LogSink = (entry: LogEntry) => void;
export declare const shouldUsePinoPretty: boolean;
export declare const shouldUseSingleLine: boolean;
export declare const LoggerContextProps: string[];
export declare const LoggerContextSymbol: unique symbol;
export declare class Logger {
    readonly scope: string;
    protected scopeData?: LogData | undefined;
    protected sink: LogSink;
    level: LoggerLevel;
    constructor(scope?: string, scopeData?: LogData | undefined, sink?: LogSink);
    scoped(shortName: string, data?: LogData): ScopedLogger;
    setScopeData(data?: LogData): this;
    data(data: LogData): ScopedLogger;
    is(level: LoggerLevel): boolean;
    alert(...messages: unknown[]): void;
    error(...messages: unknown[]): void;
    warning(...messages: unknown[]): void;
    warn(...messages: unknown[]): void;
    log(...messages: unknown[]): void;
    info(...messages: unknown[]): void;
    debug(...messages: unknown[]): void;
    debug2(...messages: unknown[]): void;
    protected write(level: LoggerLevel, messages: unknown[], force?: boolean): void;
    protected handleError(level: LoggerLevel, message: string | undefined, error: unknown, data: LogData | undefined, contextProps: LogData | undefined): void;
}
export declare class ScopedLogger extends Logger {
}
export declare class ExtendedLogger extends ScopedLogger {
}
export type LoggerInterface = Logger;
export declare const pinoLogger: PinoLogger;
export declare function createLogger(subject: string | object, defaultData?: LogData): ScopedLogger;
export declare function withLoggerContext<T>(data: LogData, fn: () => Promise<T>): Promise<T>;
export declare function setLogSink(sink: LogSink): void;
export declare function resetLogSink(): void;
export declare function createLoggerProviders(): Provider[];
//# sourceMappingURL=logger.d.ts.map