Nodejs Winston DailyRotateFile自定义格式化程序

时间:2018-05-19 16:34:44

标签: node.js winston

我正在使用DailyRotateFile一段时间,并对结果感到满意。但现在我试图在环境,交易ID等方面专门为我们的业务添加一些关键字。我只知道我们有" meta"提供一些额外信息的参数,但我真的想要一个自定义格式化程序,因为否则开发人员每次想要记录一些东西时都需要注意这个额外的参数。

这样说,我将此代码添加到我的记录器设置中。

const transports = [

  new (winston.transports.DailyRotateFile)({
    filename: './logs/scrapper.log',
    datePattern: 'yyyy-MM-dd.',
    prepend: true,
    colorize: true,
    level: config.get('logging.level'),
    zippedArchive: false,
    timestamp: function(){
    return Date.now();
    },
    formatter: function(options){
      return options.timestamp() + '-' + process.env.NODE_ENV + '- 
      message:' + (options.message ? options.message : '')
   }
  }),
  new (winston.transports.Console)({
    timestamp: function() {
      return Date.now();
    },
    formatter: function(options) {
      return options.timestamp() + '-' + process.env.NODE_ENV + '- 
     message: ' + (options.message ? options.message : '')
   }
  })
];

有趣的是它与Console传输完全正常,但DailyRotateFile的情况并非如此。我仍然在日志文件上获取默认格式。 深入研究库代码我认为options.formatter参数并没有全面通过winston库本身的通用模块。 有什么想法?

1 个答案:

答案 0 :(得分:1)

将JSON设置为false以在每日轮播文件中使用自定义格式化程序

new (winston.transports.DailyRotateFile)({
    filename: './logs/scrapper.log',
    datePattern: 'yyyy-MM-dd.',
    prepend: true,
    colorize: true,
    json:false, //Setting JSON as false
    level: config.get('logging.level'),
    zippedArchive: false,
    timestamp: function(){
    return Date.now();
    },
    formatter: function(options){
      return options.timestamp() + '-' + process.env.NODE_ENV + '-message:' + (options.message ? options.message : '')
   }
  })