Spaces:
Sleeping
Sleeping
| enum Color { | |
| Reset = "\x1b[0m", | |
| Gray = "\x1b[90m", | |
| Blue = "\x1b[34m", | |
| Yellow = "\x1b[33m", | |
| Red = "\x1b[31m", | |
| } | |
| export class Logger { | |
| private timers = new Map<string, number>(); | |
| 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); | |
| } | |
| time(label: string = "default"): void { | |
| this.timers.set(label, performance.now()); | |
| } | |
| timeEnd(label: string = "default"): void { | |
| const start = this.timers.get(label); | |
| if (start === undefined) { | |
| this.warn(`Timer '${label}' does not exist`); | |
| return; | |
| } | |
| const duration = performance.now() - start; | |
| this.timers.delete(label); | |
| this.info(`${label}: ${duration.toFixed(3)}ms`); | |
| } | |
| 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 | |
| ); | |
| } | |
| } |