import { EventEmitter } from 'events';
import { LogLevel } from './log-levels.mjs';
export interface ICanLog {
    log(level: LogLevel, msg: string, callback?: (err?: Error, result?: any) => void): void;
}
export interface ILogger {
    /** The actual logger instance */
    logger: ICanLog;
    /** The minimum log level: messages with a higher log level will be ignored. */
    minLevel: LogLevel;
}
/**
 * Singleton logger, who is given a list of loggers that do the actual logging.
 *
 * Event emitter:
 * 'error': Returns logger's error
 * 'message': Returns logger's message
 */
export declare class Logger extends EventEmitter {
    private static _instance;
    private loggers;
    private minLevel;
    private isInitialized;
    private constructor();
    static get instance(): Logger;
    initialize(loggers: ILogger[]): void;
    addLogger(logger: ILogger): void;
    info(msg: string | Object): void;
    debug(msg: string | Object): void;
    warn(msg: string | Object): void;
    error(msg: string | Object): void;
    critical(msg: string | Object): void;
    sill(msg: string | Object): void;
    private setMinLogLevel;
    private log;
}
