Uecko_ERP/apps/server/src/common/infrastructure/logger/index.ts
2025-02-06 12:55:47 +01:00

92 lines
2.3 KiB
TypeScript

import rTracer from "cls-rtracer";
import dotenv from "dotenv";
import path from "path";
import { createLogger, format, transports } from "winston";
import DailyRotateFile from "winston-daily-rotate-file";
dotenv.config();
const initLogger = () => {
const isProduction = process.env.NODE_ENV === "production";
const consoleFormat = format.combine(
format.colorize(),
format.timestamp(),
format.align(),
format.splat(),
format.errors({ stack: !isProduction }),
format.printf((info) => {
const rid = rTracer.id();
let out =
isProduction && rid
? `${info.timestamp} [request-id:${rid}] - ${info.level}: [${info.label}]: ${info.message}`
: `${info.timestamp} - ${info.level}: [${info.label}]: ${info.message}`;
if (info.metadata?.error) {
out = `${out} ${info.metadata.error}`;
if (info.metadata?.error?.stack) {
out = `${out} ${info.metadata.error.stack}`;
}
}
return out;
})
);
const fileFormat = format.combine(
format.timestamp(),
format.splat(),
format.label({ label: path.basename(String(require.main?.filename)) }),
//format.metadata(),
format.metadata({ fillExcept: ["message", "level", "timestamp", "label"] }),
format.simple(),
format.json()
);
const logger = createLogger({
level: isProduction ? "error" : "debug",
format: fileFormat,
transports: [
new DailyRotateFile({
dirname: isProduction ? "/logs" : ".",
filename: "error-%DATE%.log",
datePattern: "YYYY-MM-DD",
utc: true,
level: "error",
maxSize: "5m",
maxFiles: "1d",
}),
new DailyRotateFile({
dirname: isProduction ? "/logs" : ".",
filename: "debug-%DATE%.log",
datePattern: "YYYY-MM-DD",
utc: true,
level: "debug",
maxSize: "5m",
maxFiles: "1d",
}),
],
});
//
// If we're not in production then log to the `console` with the format:
// `${info.level}: ${info.message} JSON.stringify({ ...rest }) `
//
//if (!config.isProduction) {
logger.add(
new transports.Console({
format: consoleFormat,
level: "debug",
})
);
//}
return logger;
};
const logger = initLogger();
export { logger };