export declare enum LogLevelEnum {
    trace = 0,
    debug = 1,
    info = 2,
    warn = 3,
    error = 4
}
export type LogLevel = keyof typeof LogLevelEnum;
export type Sink = (logLevel: LogLevel, message: string, ...data: any[]) => void;
type DefaultStringType = string & {};
export type Logger<T extends string = DefaultStringType> = {
    withExtraTags: (...extraTags: string[]) => Logger<T>;
    getLogLevel: () => LogLevel;
} & Record<LogLevel, (message: string, ...data: any[]) => void>;
export type ConfigureLoggersOptions<T extends string = DefaultStringType> = T extends "default" ? never : Partial<{
    [K in T | "default"]: Partial<{
        sink: K extends "default" ? Sink : Sink | null;
        level: K extends "default" ? LogLevel : LogLevel | null;
    }>;
}>;
export type LoggerSystem<T extends string = DefaultStringType> = {
    getLogger: (scope: T, options?: {
        tags?: string[];
    }) => Logger<T>;
    configureLoggers: (optionsByScope?: ConfigureLoggersOptions<T>) => void;
    restoreDefaults: () => void;
};
export declare const createLoggerSystem: <T extends string = DefaultStringType>() => LoggerSystem<T>;
export {};
//# sourceMappingURL=index.d.ts.map