import { LogLevel } from './logLevel';
import { DebugPrinter, ILogPrinter } from './logPrinter';
/**
 * Logger class for managing log messages.
 * Supports hierarchical loggers and multiple log printers.
 */
export declare class Logger {
    private name;
    private readonly parent;
    private readonly printers;
    private readonly children;
    private severity;
    private static root;
    /**
     * Get the root logger in the hierarchy.
     * @returns The root logger.
     */
    static getRoot(): Logger;
    /**
     * Create a new logger instance.
     * @param name Name of the logger
     * @param severity Severity of messages to write
     * @returns
     */
    static create(name: string, severity?: LogLevel): Logger;
    /**
     * Initialize the root logger with the given configuration. Can only be called once per session.
     * @example
     * ```typescript
     * Logger.start({
     *    name: 'comfo-connect',
     *    level: LogLevel.DEBUG,
     *    printers: [ new FilePrinter('./comfo.log'), ConsolePrinter() ]
     * });
     * @param options - The configuration options for the root logger.
     */
    static start({ 
    /**
     * The name of the root logger.
     */
    name, 
    /**
     * The log level for the root logger.
     */
    level, 
    /**
     * The printers used to output log messages; defaults to a DebugPrinter.
     */
    printers, }: {
        name?: string | undefined;
        level?: LogLevel | undefined;
        printers?: DebugPrinter[] | undefined;
    }): void;
    /**
     * Create a new Logger instance.
     * @param name - The name of the logger.
     * @param parent - The parent logger, if any.
     * @param severity - The severity level for the logger. Defaults to LogLevel.DEFAULT.
     */
    constructor(name: string, severity?: LogLevel, parent?: Logger);
    setLogLevel(severity: LogLevel): Logger;
    enableLogLevel(severity: LogLevel): Logger;
    disableLogLevel(severity: LogLevel): Logger;
    setName(name: string): Logger;
    /**
     * Add a printer to the logger.
     * @param printer - The printer to add.
     */
    addPrinter(printer: ILogPrinter): Logger;
    /**
     * Create a child logger.
     * @param name - The name of the child logger.
     * @param severity - The severity level for the child logger. Defaults to the parent's severity level.
     * @returns The created child logger.
     */
    createLogger(name: string, severity?: LogLevel): Logger;
    /**
     * Log a message with a specific severity level.
     * @param level - The severity level of the log message.
     * @param message - The log message.
     * @param args - Additional arguments to log.
     */
    log(level: LogLevel, message: string, ...args: unknown[]): void;
    /**
     * Log an info message.
     * @param message - The log message.
     * @param args - Additional arguments to log.
     */
    info(message: string, ...args: unknown[]): void;
    /**
     * Log a verbose message.
     * @param message - The log message.
     * @param args - Additional arguments to log.
     */
    verbose(message: string, ...args: unknown[]): void;
    /**
     * Log a debug message.
     * @param message - The log message.
     * @param args - Additional arguments to log.
     */
    debug(message: string, ...args: unknown[]): void;
    /**
     * Log a warning message.
     * @param message - The log message.
     * @param args - Additional arguments to log.
     */
    warn(message: string, ...args: unknown[]): void;
    /**
     * Log an error message.
     * @param message - The log message.
     * @param args - Additional arguments to log.
     */
    error(message: string, ...args: unknown[]): void;
}
