私たちはみな console.log を愛用していますが、明らかに Winston(非常に人気)や Pino(パフォーマンスにフォーカスした新参者)のような、評価が高く永続的なロガーが真面目なプロジェクトにおいて必須となります。一連のプラクティスやツール群は、より素早くエラーについての考察を行うことに役立ちます ー(1)ログレベルを使い分ける(debug、info、error)、(2)ロギングする際は、JSON オブジェクトとしてコンテキスト情報を提供する(下記の例を参照)、(3)(多くのロガーに組み込まれている)ログクエリ API やログビューアソフトウェアを使用して、ログの確認やフィルタリングを行う、(4)Splunk のような運用ツールを使用して、運用チームのためにログステートメントを公開し、まとめる
// 集中化されたロガーオブジェクト
const logger = new winston.Logger({
level: 'info',
transports: [
new (winston.transports.Console)()
]
});
// ロガーを使用したカスタムコード
logger.log('info', 'Test Log Message with some parameter %s', 'some parameter', { anything: 'This is metadata' });
const options = {
from: Date.now() - 24 * 60 * 60 * 1000,
until: new Date(),
limit: 10,
start: 0,
order: 'desc',
fields: ['message']
};
// 1日前から今にかけてのログを見つける
winston.query(options, (err, results) => {
// results を受け取ってコールバックを実行する
});
ブログ Strong Loop より
(ロガーのための)いくつかの要件を確認してみましょう:
- 各ログ行にタイムスタンプをつけましょう。これは非常に自明です ー 各ログエントリがいつ発生したのかをはっきりさせることができるはずです。
- ロギングフォーマットは、機械だけでなく人間にとっても容易に解釈できるものであるべきです。
- 複数の設定可能な送信先ストリームを許可しましょう。例えば、あるファイルにトレースログを書き込み、一方でエラーが発生した際は同様のファイルに書き込むと同時にエラーファイルにも書き込み、そして e メールを送信するかもしれません。