温斯顿文件传输问题

时间:2013-05-20 12:42:10

标签: javascript logging winston

我正在尝试使用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仅用于测试测试; - )

1 个答案:

答案 0 :(得分:0)

我有完全相同的问题。这显然是mocha和winston文件记录的一个奇怪的副作用。

如果已经完成了以下测试并用我自己的函数替换了全局describe和it函数:

  describe = function(name, func) {
    return func();
  };

  it = function(name, func) {
    return func(function() {});
  };

然后直接用node执行测试功能。在这种情况下,winston输出就像预期的那样。当再次使用mocha执行相同的测试文件时,您再次缺少日志条目。

使用mocha执行时似乎没有触发winston文件刷新。