import type { Logger as PinoLogger } from 'pino';
import { Logger } from './logger.ts';
import { type LoggerConfig, type LoggerManagerConfig } from './types.ts';
/**
 * Logger manager is used to manage multiple instances of the Logger. The
 * loggers are created using the default config and the logger instances
 * are cached forever.
 */
export declare class LoggerManager<KnownLoggers extends Record<string, LoggerConfig>> extends Logger<LoggerConfig> {
    #private;
    /**
     * Creates a new LoggerManager instance
     * @param config - The logger manager configuration
     */
    constructor(config: LoggerManagerConfig<KnownLoggers>);
    /**
     * Creates an instance of the logger
     * @param logger - The logger key
     * @param config - The logger configuration
     * @returns A new logger instance
     */
    protected createLogger<K extends keyof KnownLoggers>(logger: K, config: KnownLoggers[K]): Logger<KnownLoggers[K]>;
    /**
     * Get instance of a logger
     * @param logger - The logger key to retrieve
     * @returns The logger instance
     */
    use<K extends keyof KnownLoggers>(logger: K): Logger<KnownLoggers[K]>;
    /**
     * Get instance of the default logger
     * @returns The default logger instance
     */
    use(): Logger<LoggerConfig>;
    /**
     * Create a logger instance from the config. The created instance
     * is not managed by the manager
     * @param config - The logger configuration
     * @param pino - Optional Pino logger instance
     * @returns A new logger instance
     */
    create<Config extends LoggerConfig>(config: Config, pino?: PinoLogger<keyof Config['customLevels'] & string>): Logger<Config>;
}
