import type { ToString, LogData, LogRecord, LogFormatter } from './types.js'; import type Handler from './Handler.js'; import { LogLevel } from './types.js'; declare class Logger { readonly key: string; level: LogLevel; filter?: RegExp; readonly keys: string; readonly handlers: Set; readonly parent?: Logger; protected _loggers: Map>; protected loggersRegistry: FinalizationRegistry; constructor(key?: string, level?: LogLevel, handlers?: Array, parent?: Logger); get loggers(): Map; getChild(key: string): Logger; getParent(): Logger | undefined; setLevel(level: LogLevel): void; getEffectiveLevel(): LogLevel; isEnabledFor(level: LogLevel): boolean; addHandler(handler: Handler): void; removeHandler(handler: Handler): void; clearHandlers(): void; hasHandlers(): boolean; setFilter(filter: RegExp): void; unsetFilter(): void; debug(msg?: ToString, format?: LogFormatter): void; debug(msg: ToString | undefined, data: LogData, format?: LogFormatter): void; info(msg?: ToString, format?: LogFormatter): void; info(msg: ToString | undefined, data: LogData, format?: LogFormatter): void; warn(msg?: ToString, format?: LogFormatter): void; warn(msg: ToString | undefined, data: LogData, format?: LogFormatter): void; error(msg?: ToString, format?: LogFormatter): void; error(msg: ToString | undefined, data: LogData, format?: LogFormatter): void; protected log(msg: ToString | undefined, data: LogData, level: LogLevel, format?: LogFormatter): void; /** * Constructs a `LogRecord` * The `LogRecord` can contain lazy values via wrapping with a lambda * This improves performance as they are not evaluated unless needed during formatting */ protected makeRecord(msg: ToString | undefined, data: LogData, level: LogLevel): LogRecord; protected callHandlers(record: LogRecord, level: LogLevel, format?: LogFormatter, keys?: string): void; } export default Logger;