温斯顿:了解日志记录级别

时间:2014-01-05 07:11:40

标签: node.js logging winston

阅读和摆弄Winston,我很困惑为什么日志级别按照它们的顺序进行排序以及为什么传输的行为与它们的行为一样(好吧,至少是控制台之一)。如果有人能够(或许甚至彻底)使用真实的用例示例,我会很感激,解释为什么使用Winston进行日志记录的方式是这样的?

例如,我设置了我的记录器:

var logger = new (winston.Logger)({
  levels: winston.config.syslog.levels,
  colors: winston.config.syslog.colors,
  level: "debug",  // I'm not sure what this option even does here???
  transports: [
    new (winston.transports.Console)({
      colorize: true,
      handleExceptions: true,
      json: false,
      level: "debug"
    })
  ]
});

所以,如果我logger.debug("Test");,那么它会记录debug: Test,很好。但如果我做logger.info("Test");,那么没有任何事情发生。

我遇到的问题是,如果我想要登录控制台 eveverything debug消息,我该怎么办? ......甚至是debug info消息,但是记录其他所有消息?

来自Java世界,使用标准记录器,我习惯让debugwarn更“细粒度”,记录器向后工作;例如,将日志记录级别设置为info会记录除debug(或其他内容)之外的所有内容。

此外,如果我希望记录器仅记录errorwarninginfo消息,我将如何使用Winston进行操作?

*编辑*

显然,这个级别顺序对winston.config.syslog.levels是唯一的。因此,剩下的唯一问题是:“是否有可能以某种方式将传输限制到非常特定的日志记录级别?”

2 个答案:

答案 0 :(得分:7)

根据documentation,您可以设置自己的记录级别,0为最低级别,并将颜色与其关联。现在,如果您不想记录最低级别,只需将level属性设置为相应级别即可。默认情况下,控制台记录器的级别设置为info

所以,这是一个例子:

logger = new (winston.Logger)({
  levels: {
    'info': 0,
    'ok': 1,
    'error': 2
  }
  transports: [
    new (winston.transports.ConsoleTransport)(silent: options.silent, level: 'ok')
  ]
});

答案 1 :(得分:1)

var logger = new (winston.Logger)({
       levels: {
        'info': 0,
        'ok': 1,
        'error': 2
       },
    colors: {
        'info': 'red',
        'ok': 'green',
        'error': 'yellow'
       },
    transports: [
        new (winston.transports.Console)({level:'info',colorize: true})
    ]
});
logger.log('info',"This is info level");
logger.info("This is info level");