Presupuestador_web/server/src/infrastructure/logger/index.ts

91 lines
2.3 KiB
TypeScript
Raw Normal View History

2024-04-23 15:29:38 +00:00
/* eslint-disable @typescript-eslint/no-unused-vars */
2024-09-17 12:39:13 +00:00
import rTracer from "cls-rtracer";
2024-04-23 15:29:38 +00:00
import path from "path";
import { createLogger, format, transports } from "winston";
import DailyRotateFile from "winston-daily-rotate-file";
import { config } from "../../config";
2024-10-01 10:21:08 +00:00
export const initLogger = (rTracer) => {
2024-04-23 15:29:38 +00:00
// a custom format that outputs request id
const consoleFormat = format.combine(
format.colorize(),
format.timestamp(),
format.align(),
format.splat(),
format.printf((info) => {
const rid = rTracer.id();
let out =
config.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;
2024-09-08 20:01:07 +00:00
})
2024-04-23 15:29:38 +00:00
);
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(),
2024-09-08 20:01:07 +00:00
format.json()
2024-04-23 15:29:38 +00:00
);
const logger = createLogger({
2024-09-08 20:05:26 +00:00
level: config.isProduction ? "debug" : "debug",
2024-04-23 15:29:38 +00:00
format: fileFormat,
transports: [
new DailyRotateFile({
2024-09-08 20:05:26 +00:00
dirname: config.isProduction ? "/logs" : ".",
2024-04-23 15:29:38 +00:00
filename: "error-%DATE%.log",
datePattern: "YYYY-MM-DD",
utc: true,
level: "error",
maxSize: "5m",
maxFiles: "1d",
}),
new DailyRotateFile({
2024-09-08 20:05:26 +00:00
dirname: config.isProduction ? "/logs" : ".",
2024-04-23 15:29:38 +00:00
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 }) `
//
2024-09-08 20:01:07 +00:00
//if (!config.isProduction) {
logger.add(
new transports.Console({
format: consoleFormat,
level: "debug",
})
);
//}
2024-04-23 15:29:38 +00:00
return logger;
2024-10-01 10:21:08 +00:00
};
2024-09-17 12:39:13 +00:00
export const logger = () => {
return initLogger(rTracer);
};