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

36 lines
1.0 KiB
TypeScript
Raw Normal View History

2026-02-12 14:46:47 +00:00
import type { ILogger } from "../types";
2025-05-09 10:45:32 +00:00
export class ConsoleLogger implements ILogger {
2026-08-31 18:51:27 +00:00
constructor(private readonly processMetadata?: Record<string, unknown>) {}
2025-05-09 10:45:32 +00:00
info(message: string, meta?: any) {
2026-08-31 18:51:27 +00:00
console.log(`[INFO] ${message}`, this.merge(meta));
2025-05-09 10:45:32 +00:00
}
warn(message: string, meta?: any) {
2026-08-31 18:51:27 +00:00
console.warn(`[WARN] ${message}`, this.merge(meta));
2025-05-09 10:45:32 +00:00
}
error(message: string, error?: Error | any) {
2026-08-31 18:51:27 +00:00
console.error(`[ERROR] ${message}`, this.merge(error?.stack || error));
2025-05-09 10:45:32 +00:00
}
2025-05-20 10:08:24 +00:00
debug(message: string, meta?: any) {
if (process.env.NODE_ENV === "development") {
console.debug(`[DEBUG] ${message}`, this.merge(meta));
}
2026-08-31 18:51:27 +00:00
}
private merge(meta: unknown): unknown {
if (!this.processMetadata) {
return meta ?? "";
}
2026-08-31 18:51:27 +00:00
return typeof meta === "object" && meta !== null
? { ...this.processMetadata, ...meta }
: { ...this.processMetadata, detail: meta ?? null };
2025-05-20 10:08:24 +00:00
}
2025-05-09 10:45:32 +00:00
}
2025-09-23 10:40:49 +00:00
2026-08-31 18:51:27 +00:00
export const createConsoleLogger = (processMetadata?: Record<string, unknown>): ILogger =>
new ConsoleLogger(processMetadata);