是否可以在 winston 日志消息中使用级别值而不是名称?
Is it possible to use level value instead of name in winston log messages?
我正在尝试制作一个以 json 格式使用 winston.js 写入日志的应用程序与 hekad
一起使用。在我将 winston.default.transports.console.json
设置为 true
之后,像 w.info('test', {val: 123})
这样的调用会产生:
{"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
});
}
});
这将 return 记录在日志文件中:
{"level":6,"message":"some message"}
您可以在 winston 文档中阅读更多相关信息(在页面底部 'Custom Log Format' 部分)link
我正在尝试制作一个以 json 格式使用 winston.js 写入日志的应用程序与 hekad
一起使用。在我将 winston.default.transports.console.json
设置为 true
之后,像 w.info('test', {val: 123})
这样的调用会产生:
{"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
});
}
});
这将 return 记录在日志文件中:
{"level":6,"message":"some message"}
您可以在 winston 文档中阅读更多相关信息(在页面底部 'Custom Log Format' 部分)link