5

log.IsDebugEnabled在温斯顿有没有等价物?

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

例如:

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

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

非常感谢!


编辑:添加了代码示例。

4

3 回答 3

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 循环替换。

于 2014-01-08T11:25:19.860 回答
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 自述文件中有关这一切的更多文档。

于 2013-11-05T16:31:41.700 回答
0

尝试

if ( logger.levels[logger.level] >= logger.levels['debug'] ) {
    // expensive calculation here
    logger.debug(...)
}
于 2018-04-12T03:38:42.233 回答