我正在使用winston登录我的nodejs项目。我在我连接的mongo db中存储了错误级别日志。以下是我的配置 -
logger = new (winston.Logger)({
transports : [
new(winston.transports.MongoDB)({
name : 'admin_log_error',
db : mongodbConfig.developmentUrl,
collection : 'admin_log',
expireAfterSeconds : oneWeekInSeconds,
level : 'error'
}),
new(winston.transports.MongoDB)({
name : 'admin_log_warn',
db : mongodbConfig.developmentUrl,
collection : 'admin_log',
expireAfterSeconds : oneWeekInSeconds,
level : 'warn'
}),
new(winston.transports.MongoDB)({
name : 'admin_log_debug',
db : mongodbConfig.developmentUrl,
collection : 'admin_log',
expireAfterSeconds : oneWeekInSeconds,
level : 'debug'
})
]
});
这是我使用它的方式。
logger.log('error',message,metadata);
但是当在错误级别日志中检查集合admin_log中的mongo db时,有两个重复的文档。在警告或调试级别没有这样的事情。我怎么能解决这个问题,有人遇到过类似的问题。
答案 0 :(得分:2)
winston允许您在每个传输上定义一个级别属性,该属性指定传输应记录的最大消息级别。
默认情况下,给予各个级别的优先级是 -
{ error: 0, warn: 1, info: 2, verbose: 3, debug: 4, silly: 5 }
因此,如果您将级别指定为error
,那么winston将记录的最大消息级别为0
。因此,不会记录值大于0
的所有级别,因此您只能看到error
级别日志。
相反,如果您将日志级别指定为info
,则winston将记录其值为2
的所有级别,因为这是info
级别的值。因此,error
,warn
和info
- 此记录器中将记录所有3个级别,因为它们的值小于或等于2
。
在您的情况下,您已指定3个具有不同级别的记录器。现在当你执行
logger.log('error',message,metadata);
然后,配置中的所有3个记录器的级别都设置为大于error
的级别。因此,所有三个记录器都将记录该值。这就是你遇到的问题。
希望这能使事情变得清晰。