/// <reference types="node" />
import * as winston from "winston";
import * as events from "events";
export declare enum SyncLogLevel {
    all = 0,
    trace = 1,
    debug = 2,
    detail = 3,
    info = 4,
    warn = 5,
    error = 6,
    fatal = 7,
    off = 8
}
export declare const levels: {
    [x: number]: number;
    readonly all: number;
    readonly trace: number;
    readonly debug: number;
    readonly detail: number;
    readonly info: number;
    readonly warn: number;
    readonly error: number;
    readonly fatal: number;
    readonly off: number;
};
export declare type HiResTime = [number, number];
export declare abstract class Logger extends events.EventEmitter {
    withContext(ctx: object): Logger;
    abstract log(level: string, msg: string, ctx?: object, hrt?: HiResTime): any;
    close(): void;
    trace(msg: string, ctx?: object): void;
    debug(msg: string, ctx?: object): void;
    detail(msg: string, ctx?: object): void;
    info(msg: string, ctx?: object): void;
    warn(msg: string, ctx?: object): void;
    error(msg: string, ctx?: object): void;
    fatal(msg: string, ctx?: object): void;
    protected getHiResTime(): HiResTime;
}
export declare class MuteLogger extends Logger {
    log(level: string, msg: string, ctx?: object, hrt?: HiResTime): void;
}
export declare class ThrowingLogger extends Logger {
    protected levels: string[];
    constructor(levels?: string[]);
    log(level: string, msg: string, ctx?: object): void;
}
declare module "winston" {
    interface FileTransportStatic {
        new (options: winston.FileTransportOptions): winston.FileTransportInstance;
    }
}
export declare class WinstonLogger extends Logger {
    private impl;
    private earlyMessages;
    private earlyMessagesSkipped;
    readonly logger: winston.LoggerInstance;
    constructor(level?: string, bufsize?: number);
    emit(topic: string, level: string, msg: string, ctx: object, hrt: HiResTime): boolean;
    private dumpBuffer;
    on(topic: string | symbol, listener: (...args: any[]) => void): this;
    addListener(topic: string | symbol, listener: (...args: any[]) => void): this;
    log(level: string, msg: string, ctx?: any, hrt?: HiResTime): void;
    close(): void;
    protected addConsole(options?: winston.ConsoleTransportOptions): void;
    protected addFile(filename: string, options?: winston.FileTransportOptions): void;
}
export declare class ConsoleLogger extends WinstonLogger {
    constructor(level?: string, transportOptions?: winston.ConsoleTransportOptions);
}
export declare class FileLogger extends WinstonLogger {
    constructor(filename: string, level?: string, transportOptions?: winston.FileTransportOptions);
}
export declare class FileConsoleLogger extends WinstonLogger {
    constructor(filename?: string, level?: string, transportOptions?: {
        file?: winston.FileTransportOptions;
        console?: winston.ConsoleTransportOptions;
    });
}
