import { LoggerOptions, DestinationStream } from 'pino';
import { LoggerOptions as LoggerOptions$1 } from 'winston';

interface ILogger {
    info(message: string, ...optionalParams: any[]): void;
    warn(message: string, ...optionalParams: any[]): void;
    error(message: string, ...optionalParams: any[]): void;
    debug(message: string, ...optionalParams: any[]): void;
    infoWithExecutionTime(message: string, execution: {
        name: string;
        start: number;
    }, ...optionalParams: any[]): void;
    warnWithExecutionTime(message: string, execution: {
        name: string;
        start: number;
    }, ...optionalParams: any[]): void;
    errorWithExecutionTime(message: string, execution: {
        name: string;
        start: number;
    }, ...optionalParams: any[]): void;
    debugWithExecutionTime(message: string, execution: {
        name: string;
        start: number;
    }, ...optionalParams: any[]): void;
}
type LogLevel = keyof ILogger;
declare enum LoggerType {
    WINSTON = "winston",
    PINO = "pino"
}
type IExtraOptions = {
    appName?: string;
};
type IPinoOptions = {
    type?: LoggerType.PINO;
    options?: (LoggerOptions | DestinationStream) & IExtraOptions;
};
type IWinstonOptions = {
    type?: LoggerType.WINSTON;
    options?: LoggerOptions$1 & IExtraOptions;
};
type ILoggerOptions = IPinoOptions | IWinstonOptions;
interface LogEntry {
    id: string;
    timestamp: string;
    level: string;
    appName: string;
    message: string;
    payload: string;
    execution: string;
}

export { type ILogger, type ILoggerOptions, type LogEntry, type LogLevel, LoggerType };
