import { LogEventsArg, TaggedLogEventsOperator } from './logEvents';
import { BasicLogger } from './basicLogger';
export declare function createLogger(basicLogger?: Readonly<{
    log: (message?: unknown, ...parameters: unknown[]) => void;
    warn: (message?: unknown, ...parameters: unknown[]) => void;
    error: (message?: unknown, ...parameters: unknown[]) => void;
}>): Readonly<{
    logEvents: <T, Y>(arg: LogEventsArg<T, Y>) => import("rxjs").OperatorFunction<T, T>;
    log: (message?: unknown, ...parameters: unknown[]) => void;
    warn: (message?: unknown, ...parameters: unknown[]) => void;
    error: (message?: unknown, ...parameters: unknown[]) => void;
}>;
export declare function createNoOpLogger(): Logger;
export declare const defaultLogger: Readonly<{
    logEvents: <T, Y>(arg: LogEventsArg<T, Y>) => import("rxjs").OperatorFunction<T, T>;
    log: (message?: unknown, ...parameters: unknown[]) => void;
    warn: (message?: unknown, ...parameters: unknown[]) => void;
    error: (message?: unknown, ...parameters: unknown[]) => void;
}>;
export declare type Logger = ReturnType<typeof createLogger>;
export declare type LogArgs = Parameters<Logger['log']>;
export declare type TaggedLogger = Logger & Readonly<{
    logEvents: TaggedLogEventsOperator;
    withTags: (...tags: unknown[]) => TaggedLogger;
    parent: BasicLogger;
}>;
export declare function createTaggedLogger(tags: unknown[], parent?: BasicLogger): TaggedLogger;
export declare function createNoOpTaggedLogger(): TaggedLogger;
