import Transport from "winston-transport";
declare type LogFunction<T> = (event: T) => void;
export interface Logger<T> {
    debug: LogFunction<T>;
    info: LogFunction<T>;
    warn: LogFunction<T>;
    error: LogFunction<T>;
    profile: LogFunction<string>;
    extend: (extraMeta: object) => Logger<T>;
}
export interface HasLogger<T> {
    logger: Logger<T>;
}
export interface LoggerMetaData {
    application: string;
    environment: string;
    correlationRequestId?: string;
}
export declare const createNoopLogger: <T>() => Logger<T>;
export declare const createDefaultLogger: <T extends object>(meta: LoggerMetaData, level?: string, transport?: Transport) => Logger<T>;
export declare const createLoggerFromContext: <T extends object>(application: string, environment: string, level: string, creator?: (meta: LoggerMetaData, level: string) => Logger<T>) => (correlationRequestId?: string | undefined) => Logger<T>;
export {};
