log.IsDebugEnabled
在温斯顿有没有等价物?
我想用它来跳过生产环境中昂贵的日志代码,但让它在开发中执行。
例如:
if(winston.isDebugEnabled){
// Call to expensive dump routine here
dump();
}
检查winston.debug
只是检查方法是否已定义,而不是是否启用。
非常感谢!
编辑:添加了代码示例。
我在我的记录器中添加了一个方法来实现这一点:
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);
};
我相信您可以直接从 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 自述文件中有关这一切的更多文档。
尝试
if ( logger.levels[logger.level] >= logger.levels['debug'] ) {
// expensive calculation here
logger.debug(...)
}