import { transports, createLogger, format } from "winston"; import cluster from "cluster"; import path from "path"; import { join, dirname } from "path"; import { fileURLToPath } from "url"; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const formatMeta = (meta) => { // You can format the splat yourself const splat = meta[Symbol.for("splat")]; if (splat && splat.length) { return splat.length === 1 ? JSON.stringify(splat[0]) : JSON.stringify(splat); } return ""; }; const customFormat = format.printf(({ timestamp, level, message, label = "", ...meta }) => `[${timestamp}] ${level} ${label} ${message} ${formatMeta(meta)}`); const logger = createLogger({ level: "debug", format: format.combine( format.colorize(), format.timestamp({ format: "MMM D, YYYY HH:mm:ss.SSS" }), customFormat, // Do not use splat format ), transports: [ // - Write all logs with importance level of `error` or less to `error.log` // - Write all logs with importance level of `info` or less to `combined.log` // new transports.Console(), new transports.File({ filename: join(__dirname, "../../logs/error.log"), level: "error" }), new transports.File({ filename: join(__dirname, "../../logs/combined.log"), }), ], }); export { logger };