64 lines
1.5 KiB
TypeScript
64 lines
1.5 KiB
TypeScript
import { ILogger } from "@erp/core/api";
|
|
import rTracer from "cls-rtracer";
|
|
import { createLogger, format, transports } from "winston";
|
|
|
|
const winston = createLogger({
|
|
level: "info",
|
|
format: format.combine(
|
|
format.colorize(),
|
|
format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }),
|
|
format.errors({ stack: true }),
|
|
format.align(),
|
|
format.splat(),
|
|
format.json(),
|
|
format.printf((info) => {
|
|
const { level, timestamp, stack, label, meta, error } = info;
|
|
const rid = rTracer.id();
|
|
let message = info.message;
|
|
|
|
if (typeof message === "object") {
|
|
message = JSON.stringify(message);
|
|
}
|
|
|
|
let out = `${timestamp}`;
|
|
|
|
if (rid) {
|
|
out = `${out} [request-id:${rid}]`;
|
|
}
|
|
|
|
out = `${out} - ${level}: [${label}]: ${message}`;
|
|
if (stack) {
|
|
out = `${out} - ${stack}`;
|
|
}
|
|
|
|
if (meta) {
|
|
out = `${out} - ${JSON.stringify(meta, null, 3)}`;
|
|
}
|
|
|
|
if (error) {
|
|
out = `${out} - ${JSON.stringify(error, null, 3)}`;
|
|
}
|
|
|
|
return out;
|
|
})
|
|
),
|
|
transports: [new transports.Console()],
|
|
});
|
|
|
|
export class WinstonLogger implements ILogger {
|
|
debug(message: string, meta?: any): void {
|
|
winston.debug(message, meta ?? {});
|
|
}
|
|
info(message: string, meta?: any) {
|
|
winston.info(message, meta ?? {});
|
|
}
|
|
|
|
warn(message: string, meta?: any) {
|
|
winston.warn(message, meta ?? {});
|
|
}
|
|
|
|
error(message: string, error?: any) {
|
|
winston.error(message, { error: error?.stack || error });
|
|
}
|
|
}
|