36 lines
1.0 KiB
TypeScript
36 lines
1.0 KiB
TypeScript
import type { ILogger } from "../types";
|
|
|
|
export class ConsoleLogger implements ILogger {
|
|
constructor(private readonly processMetadata?: Record<string, unknown>) {}
|
|
|
|
info(message: string, meta?: any) {
|
|
console.log(`[INFO] ${message}`, this.merge(meta));
|
|
}
|
|
|
|
warn(message: string, meta?: any) {
|
|
console.warn(`[WARN] ${message}`, this.merge(meta));
|
|
}
|
|
|
|
error(message: string, error?: Error | any) {
|
|
console.error(`[ERROR] ${message}`, this.merge(error?.stack || error));
|
|
}
|
|
|
|
debug(message: string, meta?: any) {
|
|
if (process.env.NODE_ENV === "development") {
|
|
console.debug(`[DEBUG] ${message}`, this.merge(meta));
|
|
}
|
|
}
|
|
|
|
private merge(meta: unknown): unknown {
|
|
if (!this.processMetadata) {
|
|
return meta ?? "";
|
|
}
|
|
return typeof meta === "object" && meta !== null
|
|
? { ...this.processMetadata, ...meta }
|
|
: { ...this.processMetadata, detail: meta ?? null };
|
|
}
|
|
}
|
|
|
|
export const createConsoleLogger = (processMetadata?: Record<string, unknown>): ILogger =>
|
|
new ConsoleLogger(processMetadata);
|