我正在尝试使用winston记录器,但在与文件传输一起使用时似乎有一种奇怪的行为。也许这是我缺少的东西,我无法弄明白。 我创建了一个简单的例子来说明这个问题。它使用mocha进行测试。
var log = require('winston')
log.add(log.transports.File, { filename: 'output.log' });
describe('Logger', function() {
it('should save the 1st message', function(done) {
log.info('1: this is the 1st message', function() {
console.log('done 1')
done()
})
})
it('should save the 2nd message', function(done) {
console.log('before test 2')
log.info('2: this is the 2nd message', function() {
console.log('done 2')
done()
})
})
it('should save the 3rd message', function(done) {
log.info('3: this is the 3rd message', function() {
console.log('done 3')
done()
})
})
}
)
第一条消息保存在output.log文件中,但不保存在其他文件中。实际上,只调用第一次测试的回调。打印'before test 2'
,但'done 2'
不是......并且第二条消息也未保存。
但是,当我评论第二行(log.add(log.transports.File,...
)时,它表现正常,在控制台中显示所有消息。我错过了什么或者它是一个错误吗?
我使用的winston版本是0.7.1。
提前致谢。
ps:console.log
仅用于测试测试; - )
答案 0 :(得分:0)
我有完全相同的问题。这显然是mocha和winston文件记录的一个奇怪的副作用。
如果已经完成了以下测试并用我自己的函数替换了全局describe和it函数:
describe = function(name, func) {
return func();
};
it = function(name, func) {
return func(function() {});
};
然后直接用node执行测试功能。在这种情况下,winston输出就像预期的那样。当再次使用mocha执行相同的测试文件时,您再次缺少日志条目。
使用mocha执行时似乎没有触发winston文件刷新。