export interface LogLevelList { TRACE: 0; DEBUG: 1; INFO: 2; WARN: 3; ERROR: 4; SILENT: 5; } export type LogLevelNumbers = LogLevelList[keyof LogLevelList]; export type LogLevelNames = 'trace' | 'debug' | 'info' | 'warn' | 'error'; type MethodFactory = (methodName: LogLevelNames, logLevel: LogLevelNames | 'silent', loggerName: string) => (...message: unknown[]) => unknown[]; type Formatter = (message: string, level: LogLevelNames | 'silent', name: string) => string; export type LogLevel = LogLevelNumbers | LogLevelNames | 'silent' | keyof LogLevelList; export interface Logger { trace(...msg: unknown[]): void; debug(...msg: unknown[]): void; log(...msg: unknown[]): void; info(...msg: unknown[]): void; warn(...msg: unknown[]): void; error(...msg: unknown[]): void; setLevel(level: LogLevel): void; getLevel(): LogLevel; setDefaultLevel?: (level: LogLevel) => void; } export interface TransportStrategy { write(methodName: string, ...args: unknown[]): void; initialize(): void; } export interface ILoggerWrapper { getWrappedLogger: () => LoggerManager; register: (transport: TransportStrategy) => void; } export interface LoggerManager { setLevel(level: LogLevel): void; getLevel(): LogLevel; getLogger(name: string | symbol): Logger; formatter?: Formatter; methodFactory?: MethodFactory; } export interface NamedLogger extends Logger { formatter: Formatter; methodFactory: MethodFactory; setLevel(level: LogLevel): void; getLevel(): LogLevel; } export {};