温斯顿:如何login到控制台和Syslog同时运输?

我爱温斯顿 ,并在我的所有项目中使用它。 现在我需要在我的一个应用程序中login到系统日志服务器。 我想,“没问题,温斯顿有这样的交通工具 ,很简单!”

但是我发现了一个问题。 npm(控制台)和syslog之间的日志级别不兼容。 例:

在我的应用程序中,我已经configuration了我的日志(大部分)

// To use syslog stuff. Commented out for the initial example //winston.setLevels(winston.config.syslog.levels); // Console logging should have timestamps which are off by default winston.remove(winston.transports.Console); winston.add(winston.transports.Console, {timestamp: true}); // Add my syslog transport winston.add( winston.transports.Syslog, { level: 'info', host: config.app.syslog.host, facility: config.app.syslog.facility, json: false } )); 

在这一点上,就我的控制台日志logging而言,一切都很好。 我可以

 winston.info('Info'); winston.error('Error'); 

我得到2个控制台日志。

但是当我取消注释winston.setLevels(winston.config.syslog.levels); 部分,所以我可以正确使用系统日志级别,我不会再得到任何输出,当我winston.error('Error')

“嗯”,我想。 “也许有我的日志级别设置为'信息'是问题,因为infoerror级别按npm和syslog映射之间的顺序颠倒,也许温斯顿只考虑增加日志级别。

  value | npm level | syslog level ---------+-------------+---------------- 0 | silly | emerg 1 | debug | alert 2 | verbose | crit 3 | INFO | ERROR 4 | warn | warning 5 | ERROR | notice 6 | | INFO 7 | | debug 

有了这个理论,我设置了level: error并再次尝试。 而且,同样的结果。

有没有人得到这个工作,以便我可以

 var logger = require('winston'); logger.info('Info'); logger.error('Error'); 

在我最初的设置后,我需要什么模块? 每个日志调用应写入我的控制台和我的系统日志。

传输也必须使用自定义级别(系统日志级别)创build。 控制台传输是在添加自定义级别之前创build的。 这个代码你可能有更好的机会:

 logger = new winston.Logger({ levels: winston.config.syslog.levels, colors: winston.config.syslog.colors }); logger.add(winston.transports.Console);