enum Color { Reset = "\x1b[0m", Gray = "\x1b[90m", Blue = "\x1b[34m", Yellow = "\x1b[33m", Red = "\x1b[31m", } export class Logger { constructor(private readonly context?: string) {} debug(message: string, ...meta: unknown[]): void { this.log("DEBUG", Color.Gray, message, meta); } info(message: string, ...meta: unknown[]): void { this.log("INFO ", Color.Blue, message, meta); } warn(message: string, ...meta: unknown[]): void { this.log("WARN ", Color.Yellow, message, meta); } error(message: string, ...meta: unknown[]): void { this.log("ERROR", Color.Red, message, meta); } private log(level: string, color: Color, message: string, meta: unknown[]): void { const timestamp = new Date().toISOString(); const context = this.context ? ` [${this.context}]` : ""; console.log( `${color}[${timestamp}] ${level}${context}: ${message}${Color.Reset}`, ...meta ); } }