import type { GetOverridedKeys } from '../types/augmentation'; import { Plugin as PluginBase } from './Plugin'; import { ChildLogger } from './ChildLogger'; type PluginConfigMap = PartialRecord ]>; type LogMethodFactory = (method: log.Level | log.LevelNumber, logger: log.Logger | ChildLogger, plugins: PluginConfigMap) => log.LoggingMethod; type LoggerMethods = Record void>; interface Logger extends LoggerMethods { } declare class Logger { #private; readonly name: string; constructor(name: string, defaultLevel: log.Level); getLevels(): log.Levels; getLevel(): log.Level; getLevelNumber(): number; setLevel(level: log.Level | log.LevelNumber): this; isLevelEnabled(level: log.Level | log.LevelNumber): boolean; log(...message: unknown[]): void; use(plugin: log.Plugin | string, config?: AnyObject): this; getLogger(name: string): log.ReadonlyLogger; } type LoggerType = Logger; declare namespace log { type Logger = { [P in keyof LoggerType]: LoggerType[P]; }; type ReadonlyLogger = { [P in keyof ChildLogger]: ChildLogger[P]; }; const Plugin: typeof PluginBase; type Plugin = PluginBase; type LoggingMethod = (...message: unknown[]) => void; type Levels = ['none', 'error', 'warn', 'info', 'debug', 'v1', 'v2', 'trace']; type LevelNumber = TupleIndices; interface LevelsOverrides { } type Level = GetOverridedKeys<'none' | 'error' | 'warn' | 'info' | 'debug' | 'v1' | 'v2' | 'trace', LevelsOverrides>; interface ConfigureOptions { readonly levels: Levels; readonly level: Level; readonly factory?: LogMethodFactory | undefined; } function normalizeLevel(level: Level | LevelNumber): log.Level; function getDefaultLevel(): Level; function setDefaultLevel(level: Level | LevelNumber): void; function getLevels(): Levels; function getLogger(name: string, defaultLevel?: Level | LevelNumber): Logger; function getLoggers(): PartialRecord; function getPlugins(): PartialRecord; function configure({ levels: newLevels, level: newLevel, factory, }: ConfigureOptions): void; function register(plugin: log.Plugin, defaultConfig?: AnyObject): void; function use(plugin: log.Plugin | string, defaultConfig?: AnyObject): void; function unregister(plugin: log.Plugin | string): void; } export default log;