8

複数のモジュールを含むノード アプリケーションに取り組んでいます。現在、ロギングを適切にセットアップしようとしており (最初にセットアップする必要がありました)、Bunyan の使用を検討しています。

この回答loggerで提案されているように、エクスポートされて他のモジュールで必要とされる単一のモジュールを用意するか、各モジュールで新しい bunyanインスタンスを直接定義して、それに応じて構成する方がよいでしょうか? 再利用については前者を想像しますが、これが今後制限されるかどうかはわかりません。logger

次のように定義された単一のロガーがある場合

var bunyan        = require('bunyan');
var logger = bunyan.createLogger({
   name: "filter",
   streams: [
      {
         level: 'info',
         stream: process.stdout
      },
      {
         level: 'error',
         path: '../error.log'
      },
      {
         level: 'debug',
         path: '../debug.log'
      }
   ]
});

module.exports = logger;

次に、それを使用するすべてのモジュールも名前filterでログを記録しますが、各モジュールがそれ自体をより適切に表す名前にログを記録する方が理にかなっている場合があります。

また、すべてのモジュールが systemErr.log などの同じログ ファイルにエラーを記録する必要があると考えるのは正しいですか?

4

1 に答える 1

17

エクスポートされ、他のモジュールによって必要とされる単一のロガーモジュールを用意したほうがよいでしょうか?

はい。シンプルであるほど良い。また、これにより、定型的なログ設定の繰り返しが回避されます。

また、すべてのモジュールが systemErr.log などの同じログ ファイルにエラーを記録する必要があると考えるのは正しいですか (より良い概要を可能にするため)、または module1Err.log、module2Err.log などの独自のエラー ログに記録する必要がありますか?

アプリケーション全体で 1 つのファイル。bunyan は ndjson 形式を使用するため、必要に応じてメイン ログ ファイルを簡単にフィルター処理できます。直接ログに記録しstdout、展開環境がどこに行くべきかを決定できるようにするシンプルさと柔軟性をお勧めします。これは、おそらくディスク上にログ ファイルを必要としない、または必要としない開発にも便利です。ツールはupstartmultilogstdout ログをディスクに適切に書き込み、ログのローテーションを処理します。

追加のヒントを 1 つ。ローカルで開発する場合、次のような方法でアプリを実行します。

node-dev --inspect server.js |\
  tee -a log/app.ndjson.log | bunyan -o short
  • node-devコードを変更すると自動的に再起動します
  • --inspectchrome devtoolsでアタッチできるデバッガーを有効にします
  • teestdout をディスクにコピーするので、後で戻ってログを確認したい場合はできますが、端末で完全な ndjson レコードを表示したくありません
  • bunyan -o shortローカル開発に必要なきれいに印刷された出力を端末に提供します
于 2014-10-30T10:33:32.740 に答える