web-dev-qa-db-ja.com

Winston / Node.jsでログレベルを設定する方法

Node.jsアプリでWinstonロギングを使用しており、ファイルトランスポートを定義しています。コード全体を通して、logger.errorlogger.warn、またはlogger.info

私の質問は、どのようにログレベルを指定するのですか?適切なログメッセージのみが記録されるように設定できる構成ファイルと値はありますか?たとえば、開発環境ではログレベルを「情報」にしたいのですが、本番環境では「エラー」にしたいです。

28
Silent User

渡されたオプションにレベルオプションがあるように見えます here

そのドキュメントから:

var logger = new (winston.Logger)({
  transports: [
    new (winston.transports.Console)({ level: 'error' }),
    new (winston.transports.File)({ filename: 'somefile.log' })
  ]
});

現在、これらの例は、オプションオブジェクトのレベルをコンソールトランスポートに渡すことを示しています。ファイルトランスポートを使用する場合、ファイルパスだけでなくレベルも含むオプションオブジェクトを渡すと思います。

それは次のようなものにつながるはずです:

var logger = new (winston.Logger)({
  transports: [
    new (winston.transports.File)({ filename: 'somefile.log', level: 'error' })
  ]
});

そのドキュメントによると、2.0の時点で、実行時に変更するsetLevelメソッドが公開されていることにも注意してください。そのドキュメントのログレベルの使用セクションをご覧ください。

21
bryanmac
winston = require('winston');
:
:
winston.level = 'debug';

ログレベルを「デバッグ」に設定します。 (winston 0.7.3でテスト済み)

34
AndreasPizsa

Winstonには6つのデフォルトレベルがあります:silly = 0(最低)、debug = 1、verbose = 2、info = 3、warn = 4、error = 5(最高)

ロガートランスポートの作成中に、次のようにログレベルを指定できます。

new (winston.transports.File)({ filename: 'somefile.log', level: 'warn' })

上記のコードはログレベルをwarnに設定します。つまり、sillyverbose、およびinfoはsomefile.logに出力されず、warndebugおよびerrorの意志。

独自のレベルを定義することもできます。

var myCustomLevels = {
  levels: {
    foo: 0,
    bar: 1,
    baz: 2,
    foobar: 3
  }
};

var customLevelLogger = new (winston.Logger)({ levels: myCustomLevels.levels });
customLevelLogger.foobar('some foobar level-ed message');

どこかで定義済みレベルを使用した場合に備えて、独自のカスタムレベルに6つの定義済みレベルを常に含めることをお勧めします。

7
Chen

適切なトランスポートのlevelプロパティを変更することにより、実行時にロギングレベルを変更できます。

var log = new (winston.Logger)({
    transports: [
        new (winston.transports.Console)({ level : 'silly' })
    ]
});

...

// Only messages with level 'info' or higher will be logged after this.
log.transports.Console.level = 'info';

私は推測しますが、ファイルについても同様に機能しますが、私はそれを試していません。

3
weekens

その場でログレベルを変更したい場合。短期間で生産上の問題を追跡する必要がある場合など。その後、エラーログレベルに戻ります。 Webでサービスを公開できる場合は、動的ロガーを使用できます https://github.com/yannvr/Winston-dynamic-loglevel

0
Yann VR