2017-03-25 2 views
0

私はnodejsプロジェクトにログインするためにwinstonを使用しています。私は接続されたmongo dbにエラーレベルのログを保存しています。以下は私の設定です -winstonはログ中にmongo dbのエラーレベルで2つのドキュメントを書きます

logger = new (winston.Logger)({ 

    transports : [ 
        new(winston.transports.MongoDB)({ 
         name    : 'admin_log_error', 
         db     : mongodbConfig.developmentUrl, 
         collection   : 'admin_log', 
         expireAfterSeconds : oneWeekInSeconds, 
         level    : 'error' 
        }), 

        new(winston.transports.MongoDB)({ 
         name    : 'admin_log_warn', 
         db     : mongodbConfig.developmentUrl, 
         collection   : 'admin_log', 
         expireAfterSeconds : oneWeekInSeconds, 
         level    : 'warn' 
        }), 

        new(winston.transports.MongoDB)({ 
         name    : 'admin_log_debug', 
         db     : mongodbConfig.developmentUrl, 
         collection   : 'admin_log', 
         expireAfterSeconds : oneWeekInSeconds, 
         level    : 'debug' 
        }) 

       ] 
}); 

これは私の使い方です。

logger.log('error',message,metadata); 

しかし、エラーレベルログがあるときはいつでも、コレクションadmin_logでmongo dbをチェックインすると、2つの重複したドキュメントがあります。警告やデバッグレベルでそのようなことはありません。どのように私はこれを解決することができます誰も同様の問題に直面している。

答えて

2

ウィンストンのdocumentation州 -

ウィンストンあなたはトランスポートはログインする必要があり、メッセージの最大レベルを指定し、各輸送上のレベルのプロパティを定義することができます。デフォルトでは

さまざまなレベルに与えられた優先順位がある - あなたがerrorとしてのレベルを指定した場合

{ error: 0, warn: 1, info: 2, verbose: 3, debug: 4, silly: 5 } 

それではウィンストンがログに記録するメッセージの最大レベルは0です。その結果、0より大きい値を持つすべてのレベルはログに記録されないため、errorレベルのログのみが表示されます。

ログレベルをinfoと指定すると、infoレベルの値であるため、winstonは値が最大で2であるすべてのレベルをログに記録します。結果としてerrorwarnおよびinfo - すべての3レベルは、値が2以下であるため、このロガーに記録されます。

異なるレベルの3つのロガーを指定しました。あなたは

logger.log('error',message,metadata); 

を実行したときに今、その後、あなたの構成内のすべての3つのロガーはerrorのレベル以上に設定し、そのレベルを持っています。その結果、3つのロガーすべてがその値を記録します。それがあなたが持つ問題です。

これは明らかにします。

+0

これで、OPが_two_文書を見ている理由を説明できますか? –

+0

この答えを書く前にOPのコードを試しました。私は 'MongoDB'の代わりに' Console'にトランスポートを切り替えて、3つのログを生成することができました。さらに、問題はログレベルの概念を理解しているようです。私はこの知識を持っていると確信していますが、OPはエラーを修正することができます。 –

関連する問題