export declare enum LogLevel { DEBUG = 0, INFO = 1, WARN = 2, ERROR = 3, FATAL = 4 } export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS'; export interface LogEntry { timestamp: Date; level: LogLevel; message: string; context?: Record; tags?: string[]; requestId?: string; userId?: string; sessionId?: string; } export interface ApiLogEntry extends LogEntry { method: HttpMethod; url: string; statusCode?: number; responseTime?: number; requestHeaders?: Record; responseHeaders?: Record; requestBody?: any; responseBody?: any; errorDetails?: { code?: string; stack?: string; cause?: any; }; } export interface MiddlewareContext { logger: ILogger; config: LoggerConfig; metadata: Record; } export type MiddlewareFunction = (entry: LogEntry, context: MiddlewareContext, next: () => Promise | void) => Promise | void; export interface LogMiddleware { name: string; execute(entry: LogEntry, context: MiddlewareContext, next: () => Promise | void): Promise | void; } export interface LogFormatter { format(entry: LogEntry): string; } export interface LogWriter { write(formattedLog: string, level: LogLevel): Promise | void; } export interface LoggerConfig { level: LogLevel; enableConsole: boolean; enableFile: boolean; filePath?: string; maxFileSize?: number; maxFiles?: number; customWriters?: LogWriter[]; formatter?: LogFormatter; enableApiLogging: boolean; sensitiveFields?: string[]; enablePerformanceLogging: boolean; middlewares?: (MiddlewareFunction | LogMiddleware)[]; } export interface ApiInterceptorConfig { logRequests: boolean; logResponses: boolean; logHeaders: boolean; logBodies: boolean; maskSensitiveData: boolean; sensitiveFields: string[]; maxBodyLength: number; } export interface PerformanceEntry extends LogEntry { operation: string; duration: number; memoryUsage?: { heapUsed: number; heapTotal: number; external: number; }; customMetrics?: Record; } export interface ILogger { debug(message: string, context?: Record): void; info(message: string, context?: Record): void; warn(message: string, context?: Record): void; error(message: string, error?: Error, context?: Record): void; fatal(message: string, error?: Error, context?: Record): void; logApiRequest(method: HttpMethod, url: string, options?: Partial): void; logApiResponse(method: HttpMethod, url: string, statusCode: number, responseTime: number, options?: Partial): void; logApiError(method: HttpMethod, url: string, error: Error, options?: Partial): void; startTimer(operation: string): () => void; logPerformance(entry: PerformanceEntry): void; setContext(key: string, value: any): void; getContext(): Record; clearContext(): void; use(middleware: MiddlewareFunction | LogMiddleware): void; removeMiddleware(middlewareName: string): void; clearMiddlewares(): void; child(context: Record): ILogger; }