import { LoggerWatcher } from './logger-watcher';
import { ILoggerServer, LogLevel, rootLoggerName } from './logger-protocol';
import { LoggerSanitizer } from './logger-sanitizer';
export { LogLevel, rootLoggerName };
export declare let logger: ILogger;
/**
 * Counterpart of the `#setRootLogger(ILogger)`. Restores the `console.xxx` bindings to the original one.
 * Invoking has no side-effect if `setRootLogger` was not called before. Multiple function invocation has
 * no side-effect either.
 */
export declare function unsetRootLogger(): void;
export declare function setRootLogger(aLogger: ILogger): void;
export type Log = (message: any, ...params: any[]) => void;
export type Loggable = (log: Log) => void;
export declare const LoggerFactory: unique symbol;
export type LoggerFactory = (name: string) => ILogger;
export declare const LoggerName: unique symbol;
export declare const ILogger: unique symbol;
export interface ILogger {
    /**
     * Set the log level.
     *
     * @param loglevel - The loglevel to set. see Logger.LogLevel for
     * possible options.
     */
    setLogLevel(logLevel: number): Promise<void>;
    /**
     * Get the log level.
     *
     * @returns a Promise to the log level.
     */
    getLogLevel(): Promise<number>;
    /**
     * Test whether the given log level is enabled.
     */
    isEnabled(logLevel: number): Promise<boolean>;
    /**
     * Resolve if the given log is enabled.
     */
    ifEnabled(logLevel: number): Promise<void>;
    /**
     * Log a loggable with the given level if it is enabled.
     */
    log(logLevel: number, loggable: Loggable): Promise<void>;
    /**
     * Log a message with the given level if it is enabled.
     *
     * @param logLevel - The loglevel to use.
     * @param message - The message format string.
     * @param params - The format string variables.
     */
    log(logLevel: number, message: any, ...params: any[]): void;
    /**
     * Test whether the trace level is enabled.
     */
    isTrace(): Promise<boolean>;
    /**
     * Resolve if the trace level is enabled.
     */
    ifTrace(): Promise<void>;
    /**
     * Log a loggable with the trace level if it is enabled.
     */
    trace(loggable: Loggable): Promise<void>;
    /**
     * Log a message with the trace level if it is enabled.
     *
     * @param message - The message format string.
     * @param params - The format string variables.
     */
    trace(message: any, ...params: any[]): Promise<void>;
    /**
     * Test whether the debug level is enabled.
     */
    isDebug(): Promise<boolean>;
    /**
     * Resolve if the debug level is enabled.
     */
    ifDebug(): Promise<void>;
    /**
     * Log a loggable with the debug level if it is enabled.
     */
    debug(loggable: Loggable): Promise<void>;
    /**
     * Log a message with the debug level if it is enabled.
     *
     * @param message - The message format string.
     * @param params - The format string variables.
     */
    debug(message: any, ...params: any[]): Promise<void>;
    /**
     * Test whether the info level is enabled.
     */
    isInfo(): Promise<boolean>;
    /**
     * Resolve if the info level is enabled.
     */
    ifInfo(): Promise<void>;
    /**
     * Log a loggable with the info level if it is enabled.
     */
    info(loggable: Loggable): Promise<void>;
    /**
     * Log a message with the info level if it is enabled.
     *
     * @param message - The message format string.
     * @param params - The format string variables.
     */
    info(message: any, ...params: any[]): Promise<void>;
    /**
     * Test whether the warn level is enabled.
     */
    isWarn(): Promise<boolean>;
    /**
     * Resolve if the warn level is enabled.
     */
    ifWarn(): Promise<void>;
    /**
     * Log a loggable with the warn level if it is enabled.
     */
    warn(loggable: Loggable): Promise<void>;
    /**
     * Log a message with the warn level if it is enabled.
     *
     * @param message - The message format string.
     * @param params - The format string variables.
     */
    warn(message: any, ...params: any[]): Promise<void>;
    /**
     * Test whether the error level is enabled.
     */
    isError(): Promise<boolean>;
    /**
     * Resolve if the error level is enabled.
     */
    ifError(): Promise<void>;
    /**
     * Log a loggable with the error level if it is enabled.
     */
    error(loggable: Loggable): Promise<void>;
    /**
     * Log a message with the error level.
     *
     * @param message - The message format string.
     * @param params - The format string variables.
     */
    error(message: any, ...params: any[]): Promise<void>;
    /**
     * Test whether the fatal level is enabled.
     */
    isFatal(): Promise<boolean>;
    /**
     * Resolve if the fatal level is enabled.
     */
    ifFatal(): Promise<void>;
    /**
     * Log a loggable with the fatal level if it is enabled.
     */
    fatal(loggable: Loggable): Promise<void>;
    /**
     * Log a message with the fatal level if it is enabled.
     *
     * @param message - The message format string.
     * @param params - The format string variables.
     */
    fatal(message: any, ...params: any[]): Promise<void>;
    /**
     * Create a child logger from this logger.
     *
     * @param name - The name of the child logger.
     */
    child(name: string): ILogger;
}
export declare class Logger implements ILogger {
    protected _logLevel: Promise<number>;
    protected created: Promise<void>;
    protected readonly server: ILoggerServer;
    protected readonly loggerWatcher: LoggerWatcher;
    protected readonly factory: LoggerFactory;
    protected name: string;
    protected readonly sanitizer: LoggerSanitizer | undefined;
    protected cache: Map<string, ILogger>;
    protected init(): void;
    setLogLevel(logLevel: number): Promise<void>;
    getLogLevel(): Promise<number>;
    isEnabled(logLevel: number): Promise<boolean>;
    ifEnabled(logLevel: number): Promise<void>;
    log(logLevel: number, arg2: any | Loggable, ...params: any[]): Promise<void>;
    protected getLog(logLevel: number): Promise<Log>;
    protected format(value: any): any;
    protected sanitize(message: string): string;
    isTrace(): Promise<boolean>;
    ifTrace(): Promise<void>;
    trace(arg: any | Loggable, ...params: any[]): Promise<void>;
    isDebug(): Promise<boolean>;
    ifDebug(): Promise<void>;
    debug(arg: any | Loggable, ...params: any[]): Promise<void>;
    isInfo(): Promise<boolean>;
    ifInfo(): Promise<void>;
    info(arg: any | Loggable, ...params: any[]): Promise<void>;
    isWarn(): Promise<boolean>;
    ifWarn(): Promise<void>;
    warn(arg: any | Loggable, ...params: any[]): Promise<void>;
    isError(): Promise<boolean>;
    ifError(): Promise<void>;
    error(arg: any | Loggable, ...params: any[]): Promise<void>;
    isFatal(): Promise<boolean>;
    ifFatal(): Promise<void>;
    fatal(arg: any | Loggable, ...params: any[]): Promise<void>;
    child(name: string): ILogger;
}
//# sourceMappingURL=logger.d.ts.map