import { ErrorChain } from "../lib/error";
/** Log levels defined in RFC5424. */
export declare enum ELogLevel {
    Emergency = 0,
    Alert = 1,
    Critical = 2,
    Error = 3,
    Warning = 4,
    Notice = 5,
    Informational = 6,
    Debug = 7
}
/** Log message types. */
export declare type ILogMessage = string | Error | ErrorChain;
/** Log metadata type. */
export interface ILogMetadata extends Object {
    [key: string]: any;
}
/** Abstract log class. */
export declare abstract class Log {
    /** System is unusable. */
    emergency(message: ILogMessage, metadata?: ILogMetadata, ...args: any[]): void;
    /** Action must be taken immediately. */
    alert(message: ILogMessage, metadata?: ILogMetadata, ...args: any[]): void;
    /** Critical conditions. */
    critical(message: ILogMessage, metadata?: ILogMetadata, ...args: any[]): void;
    /** Error conditions. */
    error(message: ILogMessage, metadata?: ILogMetadata, ...args: any[]): void;
    /** Warning conditions. */
    warn(message: ILogMessage, metadata?: ILogMetadata, ...args: any[]): void;
    /** Normal but significant condition. */
    notice(message: ILogMessage, metadata?: ILogMetadata, ...args: any[]): void;
    /** Informational messages. */
    info(message: ILogMessage, metadata?: ILogMetadata, ...args: any[]): void;
    /** Debug level messages. */
    debug(message: ILogMessage, metadata?: ILogMetadata, ...args: any[]): void;
    /** Log method provided by implementor. */
    protected abstract log(level: ELogLevel, message: ILogMessage, metadata: ILogMetadata, ...args: any[]): void;
}
