关于node.js:Winston:如何同时登录控制台和Syslog传输?

Winston: how to log to Console AND Syslog transports at the same time?

我爱Winston,并在我的所有项目中使用它。现在,我需要在我的一个应用程序中登录到syslog服务器。我想:"没问题。温斯顿有交通工具。很简单!"

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

在我的应用程序中,我已经像这样配置了我的日志(大部分是)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 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
    }
));

至此,就我的控制台日志而言,一切都很好。我可以

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

我得到2个控制台日志。

但是,当我取消注释winston.setLevels(winston.config.syslog.levels);部分以便可以正确使用syslog级别时,当我winston.error('Error')时不再获得任何输出。

我想:"嗯。""也许将我的日志级别设置为'info'是问题,因为infoerror级别在npm和syslog映射之间的顺序颠倒了,也许Winston只考虑增加日志级别。"

1
2
3
4
5
6
7
8
9
10
  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并再次尝试。再一次,同样的结果。

有没有人让这个工作,所以我可以

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

在初始设置后,请使用任何模块?每个日志调用都应写入我的控制台以及syslog。


还必须使用自定义级别(系统日志级别)创建传输。 在添加自定义级别之前,已创建控制台传输。 您可能有以下代码更好的机会:

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