NodeJS Winston中是否有log.IsDebugEnabled的等价物?

hsvhsicv  于 2023-03-01  发布在  Node.js
关注(0)|答案(4)|浏览(113)

在Winston中是否有log.IsDebugEnabled的等价物?
我想用它来跳过生产环境中昂贵的日志记录代码,而在开发中执行它。
例如:

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

检查winston.debug只是检查是否定义了该方法,而不是是否启用了它。
非常感谢!
编辑:添加了代码示例。

rnmwe5a2

rnmwe5a21#

我在日志记录器中添加了一个方法来实现这一点:

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);
};

这会遍历你的日志记录器的每一个传输,并检查它是否“想要”记录指定的级别。注意_.any是lodash,你可以用for循环来替换。

fgw7neuy

fgw7neuy2#

我相信您可以直接从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。

xxhby3vn

xxhby3vn3#

试试看

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

vqlkdk9b4#

从Winston 3.1.0(PR)开始,您可以使用Logger函数isLevelEnabled(string)isXXXEnabled()来实现这一点。

相关问题