/**
 * Centralized logging module with dependency injection.
 *
 * By default uses a simple console-based logger (zero dependencies).
 * Consumers can inject a custom logger (e.g. pino) via setLogger().
 *
 * Usage:
 *   import { logger } from './utils/logger.js';
 *   logger.info('Processing file', { file: 'test.java' });
 *   logger.error('Failed to parse', { error: err.message });
 *
 * Injecting a custom logger (e.g. pino):
 *   import pino from 'pino';
 *   import { setLogger } from 'circle-ir';
 *   setLogger(pino({ level: 'debug' }));
 *
 * Log Levels (in order of severity):
 *   - trace: Very detailed debugging
 *   - debug: Debugging information
 *   - info: General information (default)
 *   - warn: Warnings
 *   - error: Errors
 *   - fatal: Fatal errors
 *   - silent: No logging
 */
export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal' | 'silent';
export interface LoggerConfig {
    level?: LogLevel;
    name?: string;
}
/**
 * Interface for injectable loggers.
 * Compatible with pino, console, and custom implementations.
 */
export interface LoggerInstance {
    trace(msg: string, obj?: Record<string, unknown>): void;
    debug(msg: string, obj?: Record<string, unknown>): void;
    info(msg: string, obj?: Record<string, unknown>): void;
    warn(msg: string, obj?: Record<string, unknown>): void;
    error(msg: string, obj?: Record<string, unknown>): void;
    fatal(msg: string, obj?: Record<string, unknown>): void;
}
/**
 * Configure the logger. Should be called early in application startup.
 */
export declare function configureLogger(config: Partial<LoggerConfig>): void;
/**
 * Inject a custom logger implementation (e.g. pino).
 * The custom logger receives all log calls regardless of level filtering —
 * it is expected to handle its own level filtering.
 */
export declare function setLogger(instance: LoggerInstance): void;
/**
 * Set the log level dynamically
 */
export declare function setLogLevel(level: LogLevel): void;
/**
 * Get the current log level
 */
export declare function getLogLevel(): LogLevel;
/**
 * The main logger instance.
 * Use this for all logging throughout the application.
 */
export declare const logger: {
    trace: (msg: string, obj?: Record<string, unknown>) => void;
    debug: (msg: string, obj?: Record<string, unknown>) => void;
    info: (msg: string, obj?: Record<string, unknown>) => void;
    warn: (msg: string, obj?: Record<string, unknown>) => void;
    error: (msg: string, obj?: Record<string, unknown>) => void;
    fatal: (msg: string, obj?: Record<string, unknown>) => void;
    isLevelEnabled: (level: LogLevel) => boolean;
};
//# sourceMappingURL=logger.d.ts.map