NSMP-Server / src /logger /logger.ts
Franek-Le's picture
Use logger instead of console.log
a484614
Raw
History Blame Contribute Delete
1.44 kB
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
);
}
}