export enum LogLevel { DEBUG = 'DEBUG', INFO = 'INFO', WARN = 'WARN', ERROR = 'ERROR' } export class Logger { private static instance: Logger; private minLevel: LogLevel = LogLevel.INFO; static getInstance(): Logger { if (!Logger.instance) { Logger.instance = new Logger(); } return Logger.instance; } setLevel(level: LogLevel): void { this.minLevel = level; } private shouldLog(level: LogLevel): boolean { const levels = [LogLevel.DEBUG, LogLevel.INFO, LogLevel.WARN, LogLevel.ERROR]; return levels.indexOf(level) >= levels.indexOf(this.minLevel); } private log(level: LogLevel, message: string, context?: any): void { if (!this.shouldLog(level)) return; const timestamp = new Date().toISOString(); const contextStr = context ? ` ${JSON.stringify(context)}` : ''; const logMessage = `[${timestamp}] ${level}: ${message}${contextStr}`; console.error(logMessage); } debug(message: string, context?: any): void { this.log(LogLevel.DEBUG, message, context); } info(message: string, context?: any): void { this.log(LogLevel.INFO, message, context); } warn(message: string, context?: any): void { this.log(LogLevel.WARN, message, context); } error(message: string, context?: any): void { this.log(LogLevel.ERROR, message, context); } } // Export singleton instance export const logger = Logger.getInstance();