FactuGES_ERP/packages/rdx-logger/src/strategies/console-logger.ts

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);