5

ファイルとMongoDBの2つの異なるトランスポートでログを記録するためにWinstonを使用しています。File のレベルを「INFO」に、MongoDB のレベルを「ERROR」に設定しました。今ログインすると、

log.info('some info...');
log.warn('some Warning...');
log.error('some error...');

これらはすべて LogFile に送られ、Error だけが DB に送られます。私は情報メッセージだけをファイルに送り、それ以外は送りたくない。

私は、Winston のシステム ログ レベルを理解しています。また、MongoDB には最高レベルであるため、Error のみが送信されることを理解しています。INFO は下位レベルであるため、レベル INFO 以上のログはすべてファイルに保存されます (ロガーの定義による)。

ここを読みましたが、答えが見つかりませんでした。カスタム レベルを作成したとしても、各トランスポートを 1 つのログ レベルだけに制限するにはどうすればよいでしょうか?

4

3 に答える 3

0

同様の問題があり、これが私が思いついたものです。これは、ログ関数を空の関数に設定するだけで実行できます。これは、私が修正した私のコードで、似たようなことを行いました。このコードは、customSilenceLevelLow と customSilenceLevelHigh を取り、customSilenceLevelLow 以下の値を持つログ関数は空の関数に設定され、customSilenceLevelHigh 以上の値を持つログ関数は空の関数に設定されます。

したがって、このコードでは、レベル info、info2、および info3 のログのみがコンソールに記録されます。残りはしません。

注: これらの変更をテストしなかったため、構文エラーが発生する可能性がありますが、ロジックは適切であるはずです。

winston = require("winston") 

var levels = {levels: {
    debug: 0,
    debug2: 1,
    debug3: 2,
    verbose: 3,
    verbose2: 4,
    verbose3: 5,
    info: 6,
    info2: 7,
    info3: 8,
    silly: 9,   
    warn: 10,
    error: 11
},
colors: {
    debug: "blue",
    debug2: "cyan",
    debug3: "grey",
    verbose: "cyan",
    verbose2: "magenta",
    verbose3: "blue",
    info: "green",
    info2: "magenta",
    info3: "grey",
    silly: "green", 
    warn: "yellow",
    error: "red"
}}

//needed so that new levels and colors are recognized       
winston.setLevels(levels.levels)
winston.addColors(levels.colors);

//add color to log text
winston.default.transports.console.colorize = true
winston.default.transports.console.prettyPrint = true

//false is default silences transport
winston.default.transports.console.silent = false

winston.default.transports.console.level = "debug"

var customSilenceLevelLow = "info"
var customSilenceLevelHigh = "info3"

for (var k in levels.levels) {

    if (levels.levels[k] <= levels.levels[customSilenceLevelLow] || levels.levels[k] >= levels.levels[customSilenceLevelHigh]) {

        //create an empty function to silence logs
        winston[k] = function () {}
    }   
}
于 2015-03-04T23:59:35.913 に答える
0

この回答を参照してください。基本的な API をカバーする winston のラッパーを作成しました。メタデータをログに記録するために拡張する必要がありますが、それ以外は良いスタートです。もちろん、MongoDB のニーズに合わせてこれを調整する必要があります。

于 2014-06-10T14:21:28.540 に答える