0

winston logger を使用しようとしていますが、ファイル トランスポートで使用すると奇妙な動作をするようです。おそらくそれは私が見逃していて、理解できなかったものです。問題を説明するために簡単な例を作成しました。テストにはモカを使用します。

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'そうではありません...そして2番目のメッセージも保存されません。

しかし、2 行目にコメントを付けると ( log.add(log.transports.File,...)、正常に動作し、すべてのメッセージがコンソールに表示されます。何か不足していますか、それともバグですか?

私が使用している winston のバージョンは 0.7.1 です。

前もって感謝します。

ps:これconsole.logはテストをテストするためだけのものでした;-)

4

1 に答える 1

0

私はまったく同じ問題を抱えています。これは明らかに mocha と winston のファイル ロギングの奇妙な副作用です。

次のテストを実行し、グローバル記述を置き換えて、それが独自の関数で機能する場合:

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

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

次に、ノードでテスト関数を直接実行します。この場合、winston の出力は予想どおりです。mocha を使用して同じテスト ファイルを再度実行すると、ログ エントリが再び失われます。

mochaで実行すると、winstonファイルのフラッシュがトリガーされないようです。

于 2013-05-31T15:00:12.327 に答える