Spaces:
Sleeping
Sleeping
File size: 1,437 Bytes
d6986d3 a484614 d6986d3 a484614 d6986d3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
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
);
}
} |