12345678910111213141516171819202122232425262728293031323334353637383940 |
- 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 };
|