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

问题描述:

我正在尝试使用json格式的winston.js编写日志并与hekad一起工作的应用程序。之后予置winston.default.transports.console.jsontrue,调用等w.info('test', {val: 123})农产品:是否可以在winston日志消息中使用级别值而不是名称?

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

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

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

您必须在传输中禁用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 
    }); 
    } 
}); 

这将在日志文件中返回:

{ “级”:6, “消息”: “一些信息”}

你可以阅读更多关于它在winston文档中(页面底部“自定义日志格式”部分)link