Winston中是否有等效的log.IsDebugEnabled?

时间:2013-11-05 11:23:45

标签: node.js logging winston

温斯顿有等效的log.IsDebugEnabled吗?

我想使用它来跳过生产环境中昂贵的日志记录代码,但让它在开发中执行。

例如:

if(winston.isDebugEnabled){
   // Call to expensive dump routine here
   dump();
}

检查winston.debug只检查方法是否已定义,而不是是否已启用。

非常感谢!


编辑:添加了代码示例。

3 个答案:

答案 0 :(得分:2)

我已经在记录器中添加了一个方法来实现:

logger.isLevelEnabled = function(level) {
  return _.any(this.transports, function(transport) {
    return (transport.level && this.levels[transport.level] <= this.levels[level])
      || (!transport.level && this.levels[this.level] <= this.levels[level]);
  }, this);
};

这会记录每个记录器的传输,并检查它是否“想要”记录指定的级别。 注意_.anylodash,您可以使用for循环替换。

答案 1 :(得分:0)

我确信你可以直接从winston获得它,但是如果你想为不同的环境设置不同的日志记录级别,你应该在创建winston.logger时传递它们。

例如:

// default log file level is info (which is the lowest by default)
var logFileLevel = 'info';

if (process.env.NODE_ENV == 'production') {
    // only write logs with a level of 'error' or above when in production
    logFileLevel = 'error';
}

var logger = new (winston.Logger)({
    transports: [
        new (winston.transports.File)({ 
            filename: '/var/log/node-logger.log',
            level: logFileLevel
        })
    ]
});

切换传输也很有用。您可能希望在开发过程中使用控制台传输,例如在生产时使用文件传输。

winston readme上有关所有这些内容的更多文档。

答案 2 :(得分:0)

尝试

if ( logger.levels[logger.level] >= logger.levels['debug'] ) {
    // expensive calculation here
    logger.debug(...)
}