export declare enum LogLevel { CRITICAL = 0, ERROR = 1, WARN = 2, INFO = 3, DEBUG = 4 } export declare const LogSymbols: { [Level in LogLevel]: string; }; export declare function tryParseLogLevel(text: string): LogLevel | undefined; export interface LogSink { filter: LogLevel; handle(record: LogRecord): void; } export type ConsoleObject = Pick; export type LogFormatter = (record: LogRecord) => string; export declare class Formatter { static readonly sparse: LogFormatter; static readonly json: LogFormatter; static readonly pretty: LogFormatter; static readonly structured: LogFormatter; static readonly default: LogFormatter; private constructor(); } export declare function tryParseFormatter(text: string): LogFormatter | undefined; export declare class ConsoleSink implements LogSink { protected formatter: LogFormatter; protected consoleObject: ConsoleObject; filter: LogLevel; constructor(formatter?: LogFormatter, filter?: LogLevel, consoleObject?: ConsoleObject); handle(record: LogRecord): void; } export declare class InteractiveConsoleSink extends ConsoleSink { handle(record: LogRecord): void; } export type OnLogMessage = (formattedString: string, record: LogRecord) => void; export declare class CallbackSink implements LogSink { protected formatter: LogFormatter; protected cb: OnLogMessage; filter: LogLevel; constructor(cb: OnLogMessage, formatter?: LogFormatter, filter?: LogLevel); handle(record: LogRecord): void; } export interface LoggerLike { readonly name: string | undefined; sinks: LogSink[]; filter: LogLevel; parent: LoggerLike | undefined; log(level: LogLevel, message: string, extra?: Record | undefined): void; insert(record: LogRecord): void; readonly error: (message: string, extra?: Record) => void; readonly warn: (message: string, extra?: Record) => void; readonly info: (message: string, extra?: Record) => void; readonly debug: (message: string, extra?: Record) => void; } export declare class Logger implements LoggerLike { #private; sinks: LogSink[]; filter: LogLevel; parent: Logger | undefined; get name(): string | undefined; constructor(filter: LogLevel, name?: string | undefined, sinks?: LogSink[], parent?: Logger | undefined); log(level: LogLevel, message: string, extra?: Record | undefined): void; insert(record: LogRecord): void; readonly error: (message: string, extra?: Record) => void; readonly warn: (message: string, extra?: Record) => void; readonly info: (message: string, extra?: Record) => void; readonly debug: (message: string, extra?: Record) => void; } export declare const GLOBAL_LOGGER: Logger; export type LogFn = (message: string, extra?: Record | undefined) => void; export type LogWithLevelFn = (level: LogLevel, message: string, extra?: Record | undefined) => void; export declare const error: LogFn; export declare const warn: LogFn; export declare const info: LogFn; export declare const debug: LogFn; export declare const log: LogWithLevelFn; export interface LogRecord { readonly date: Date; readonly level: LogLevel; readonly logger: LoggerLike; readonly message: string; readonly extra: Record | undefined; }