我正试图使一个用winston.js以json格式编写日志的应用程序与hekad一起工作。在我将winston.default.transports.console.json设置为true之后,像w.info('test', {val: 123})这样的调用会产生:
{"val":123,"level":"info","message":"test"}
问题是,根据heka文档,严重性必须是数字的,例如(对于syslog级别)6而不是info、5而不是notice等等。是否可以指示温斯顿将级别值而不是名称写入日志?
发布于 2016-02-05 23:31:41
最简单的方法是更改日志格式。这允许您创建几乎相同的输出,但例如,您可以将您的级别名称映射到数字。
你必须在运输中禁用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,“消息”:“某些消息”}
您可以在温斯顿文档(在“自定义日志格式”部分的页面底部)中阅读更多有关它的信息。链接
https://stackoverflow.com/questions/35184017
复制相似问题