带时间戳的温森不添加时间戳

Winson with timestamp not adding timestamps

我为我的节点应用程序创建了一个简单的 Winston 记录器,但是带有时间戳的配置不起作用,这是什么意思?这意味着所有日志都没有时间戳。

示例:

const { createLogger, format, transports } = require('winston');
const logger = createLogger({
    transports: [
        new transports.File({
            maxsize: 5120000,
            maxFiles: 20,
            filename: `logs/logs.log`,
            colorize: true,
            json: true,
            timestamp: true
        }),
        new transports.Console({
            level: "debug",
            timestamp: true,
            format: format.combine(
                format.colorize(), 
                format.simple(),
                format.timestamp()
            )
        })
    ]
});


module.exports = { logger };

simple()格式不输出时间戳。所以你应该使用 printf:

定义自定义格式
const { createLogger, format, transports } = require('winston');

const myFormat = format.printf(({ level, message, label, timestamp }) => {
  return `${timestamp} [${label}] ${level}: ${message}`;
});

const logger = createLogger({
    transports: [
        new transports.File({
            maxsize: 5120000,
            maxFiles: 20,
            filename: `logs/logs.log`,
            timestamp: true,
            json: true,
        }),
        new transports.Console({
            level: "debug",
            timestamp: true,
            format: format.combine(
                format.timestamp(),
                format.colorize(), 
                myFormat,
            )
        })
    ]
});


module.exports = { logger };

我还在 myFormat 之前移动了 timestamp() 格式,因为它应该在消息到达 printf 之前填充消息的时间戳。