在winston日志消息中是否可以使用级别值而不是名称?

时间:2016-02-03 17:42:47

标签: node.js logging winston hekad

我试图创建一个使用json格式的winston.js编写日志的应用程序与hekad一起使用。将winston.default.transports.console.json设置为true后,w.info('test', {val: 123})等调用产生:

{"val":123,"level":"info","message":"test"}

问题在于根据heka docs,严重性必须是数字,例如(对于系统日志级别)6而不是info,而不是notice,等等。是否可以指示winston将级别值而不是名称写入日志?

1 个答案:

答案 0 :(得分:1)

最简单的方法是更改​​日志格式。这允许您创建几乎相同的输出,但是例如,您可以将您的级别名称映射到数字。

您必须在传输中禁用json。下面的示例我禁用了它,但我手动将其格式化为json。

示例:

this.logger.add(winston.transports.File, {
  name:'log.info',
  level: 'info',
  filename: path.join(logPath, 'info.log'),
  json: false, // this is important
  maxsize: 5242880,
  maxFiles: 5,
  colorize: false,
  formatter: function(options) { //formatter function
    var map = { //add rest of levels with values
      info: 6,
      notice: 5
    }
    //to check all options
    console.log(options); //then you know what props you can use to create desired output
    //because we turn off json we have to manually create it
    return JSON.stringify({ 
      level: map[options.level],//I map level
      message: options.message
    });
  }
});

这将在日志文件中返回:

{" level":6," message":" some message"}

您可以在winston文档中详细了解它(在页面底部'自定义日志格式')link