import Transport from 'winston-transport';
import { Format } from 'logform';
import { Environments } from '@f2/config';
import joi from '@f2/joi';
import { RootLogger, LoggerScopeBag as LoggerScopeBag } from './root-logger';
import { ErrorSerializer, Logger } from './logger';
import { LoggerPurgeOptions } from './purge/purge.options';
export type LoggerRotate = 'daily' | 'size';
interface BaseConfig {
    console: boolean;
    level: string;
    dateFormat: string;
    timeFormat: string;
    path: string;
    rotate: LoggerRotate;
    transports: Transport[];
    purge?: LoggerPurgeOptions;
}
export interface LoggerConfig extends Partial<BaseConfig> {
    maxsize?: number;
    maxfiles?: number;
    serializeError?: ErrorSerializer;
}
type LoggerFinalConfig = LoggerConfig & BaseConfig;
export declare const LoggerConfigSchema: joi.ObjectSchema<LoggerConfig>;
export declare function getLoggerFormat(config: LoggerFinalConfig, scopeBag: LoggerScopeBag, colorize: boolean): Format;
export declare function getLoggerTransports(config: LoggerFinalConfig, scopeBag: LoggerScopeBag): Transport[];
export declare function enableProdMode(logger: Logger): void;
export declare function buildLogger(rawConfig: LoggerConfig, env?: Environments): Promise<RootLogger>;
export {};
