首页 > 解决方案 > 在 nodejs winston logger 中为时间戳使用不同的属性名称

问题描述

我正在使用带有时间戳格式化程序的 winstonjs 记录器。

我看到有一个提供别名的选项,我知道这是更改时间戳属性名称的方法,但它只会添加另一个具有别名的时间戳属性......例如:

    var myFormat = winston.format.combine(winston.format.timestamp({format:'YYYY-MM-DD HH:mm:ss.SSS', alias:'Date'}),
                                          winston.format.json());
    this.winstonLogger = winston.createLogger();
    this.winstonLogger.configure({
        level: 'info',
        format: myFormat,
        transports: [
            new winston.transports.Console(),
          ]
    });

将产生如下日志:

{"level":"info","message":"app is loaded","timestamp":"2019-06-03 17:01:10.054","Date":"2019-06-03 17:01:10.054"}

所以有 2 个时间戳属性,一个名为“timestamp”,一个名为“Date”,正如我所要求的那样。

我用错了吗?还有另一种方法可以做到这一点吗?

标签: node.jsloggingwinston

解决方案


奇怪的是,添加别名时会将其添加为单独的时间戳条目。我认为作为一种解决方法,你可以试试这个。

const winston = require('winston'); 
const {createLogger, format, transports, info} = require('winston');

const removeTimestamp = format((info, opts) => {
  if (info.timestamp) {
    delete info.timestamp;
    return info;
  }
});

this.winstonLogger = createLogger({
  // To see more detailed errors, change this to 'debug'
  level: 'info',
  format: format.combine(
      format.timestamp({
        format: 'YYYY-MM-DD HH:mm:ss.SSS',
        alias: 'Date',
      }),
      removeTimestamp(),
      format.json(),
  ),
  transports: [
    new transports.Console()
  ],
});

推荐阅读