winston在记录时在mongo db中写入错误级别的两个文档

时间:2017-03-25 07:34:33

标签: node.js mongodb winston

我正在使用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时,有两个重复的文档。在警告或调试级别没有这样的事情。我怎么能解决这个问题,有人遇到过类似的问题。

1 个答案:

答案 0 :(得分:2)

温斯顿的documentation表示 -

  

winston允许您在每个传输上定义一个级别属性,该属性指定传输应记录的最大消息级别。

默认情况下,给予各个级别的优先级是 -

{ error: 0, warn: 1, info: 2, verbose: 3, debug: 4, silly: 5 }

因此,如果您将级别指定为error,那么winston将记录的最大消息级别为0。因此,不会记录值大于0的所有级别,因此您只能看到error级别日志。

相反,如果您将日志级别指定为info,则winston将记录其值为2的所有级别,因为这是info级别的值。因此,errorwarninfo - 此记录器中将记录所有3个级别,因为它们的值小于或等于2

在您的情况下,您已指定3个具有不同级别的记录器。现在当你执行

logger.log('error',message,metadata);

然后,配置中的所有3个记录器的级别都设置为大于error的级别。因此,所有三个记录器都将记录该值。这就是你遇到的问题。

希望这能使事情变得清晰。