2017-02-04 9 views
0

私はwinstonを使用してログを保存しています。ログをファイルに保存しています。Nodejs、Winston:ログエントリが重複しています

var winston = require('winston'); 
var moment = require('moment'); 
var logger = new (winston.Logger)({ 
transports: [ 
    new (winston.transports.File)({ 
     name: 'info-file', 
     filename: 'console.log', 
     timestamp : function() {return moment().utcOffset(330).format('DD-MM HH:mm'); }, 
     level: 'info' 
    }), 
    new (winston.transports.File)({ 
     name: 'debug-file', 
     filename: 'console.log', 
     timestamp : function() {return moment().utcOffset(330).format('DD-MM HH:mm'); }, 
     level: 'debug' 
    }), 
    new (winston.transports.File)({ 
     name: 'error-file', 
     filename: 'console.log', 
     timestamp : function() {return moment().utcOffset(330).format('DD-MM HH:mm'); }, 
     level: 'error' 
    }), 
    new (winston.transports.File)({ 
     name: 'unhandled-error-file', 
     filename: 'console.log', 
     timestamp : function() {return moment().utcOffset(330).format('DD-MM HH:mm'); }, 
     handleExceptions: true 
    }) 
] 
}); 

これは、私が実行しているコマンドです:

router.get('/exercise_excel_entry', function(req,res){ 
    logger.log('info', "info testing"); 
    logger.log('debug', "debug testing"); 
    logger.log('error', "error testing"); 
    res.render('exercise_excel_entry'); 
}); 

これは、ファイルに保存されて出力されます:情報とエラーがタグ付けされた理由を

{"level":"info","message":"info testing","timestamp":"04-02 11:51"} 
{"level":"error","message":"error testing","timestamp":"04-02 11:51"} 
{"level":"info","message":"info testing","timestamp":"04-02 11:51"} 
{"level":"info","message":"info testing","timestamp":"04-02 11:51"} 
{"level":"error","message":"error testing","timestamp":"04-02 11:51"} 
{"level":"debug","message":"debug testing","timestamp":"04-02 11:51"} 
{"level":"error","message":"error testing","timestamp":"04-02 11:51"} 
{"level":"error","message":"error testing","timestamp":"04-02 11:51"} 

私は理解していませんログは重複しています

答えて

0

winstonのドキュメントに従って:

winstonでは、トランスポートごとにレベルプロパティを定義できます。 は、トランスポートが記録するメッセージの最大レベルを指定します。

ここにキーワードは最大です。

デフォルトのログレベルは次のとおりです。

あなたのケースではそう
{ error: 0, warn: 1, info: 2, verbose: 3, debug: 4, silly: 5 } 

  • info-fileは、上のレベル '情報' か(エラー& が警告)とメッセージを記録します。
  • debug-fileは、レベル 'debug'以上のメッセージ、つまり (エラー、警告、info &詳細)を記録します。
  • error-fileは、レベル 'error'以上(未処理の例外を除くすべて)のメッセージをログに記録します。
  • unhandled-error-fileは、レベル 'unhandled-error'のメッセージをログに記録します のみ。

すべてのトランスポートにはファイル名console.logを使用しています。

次のようにログの順序は次のとおりです。

logger.log('info', "info testing"); // both info-file & debug-file transport logs it 
logger.log('debug', "debug testing"); // only debug-file transport logs it 
logger.log('error', "error testing"); // info-file, debug-file and error-file transports logs it 

だから、ログファイルにinfo & errorメッセージに対して複数のエントリを説明します。

EDIT

ない最善の解決策(このようをログに記録しないレベルのために空白行を追加します):

new (winston.transports.File)({ 
    name: 'info-file', 
    filename: 'console.log', 
    timestamp : function() {return moment().utcOffset(330).format('DD-MM HH:mm'); }, 
    level: 'info', 
    filters: [function (level, msg, meta) { 
     return (level === 'info') ? msg : ''; 
    }], 
    formatter: function(options) { 
     return msg === '' ? '' : { level: options.level, timestamp: options.timestamp, message: options.message, meta: options.meta }; 
    } 
}) 
+0

ああ...そうか、私はメッセージがメッセージを送信することができますその優先レベルだけ? – suku

+0

現在、私はそれを行う方法はないと思います。 –

+0

このことは、私のログを不必要に膨らませてしまうので、これらのカテゴリの下で単一のログエントリを取得する方法はありませんか? – suku

関連する問題