技術の変遷は秋の空、ワイの興味は飽きの空。時々OSSとテスト。

2023-09-09

ログレベルの考え方(fukabori.fm 101回より)

#ログ
ログレベルについて

ダイの大冒険という漫画が大好きなbun913です。

みなさんログの効果的な運用できていますか?

WebアプリケーションFWにログの仕組みがついていたりして、ログレベルやログの形式だけオプションで指定するみたいなことも多いですよね。

ただ、ログレベルについて体系的に書かれた書籍とかって少なくないですか?

私はあまりみたことがありません。

今回は私がよく聞かせていただいているfukabori.fmの101. A Philosophy of Software Design (2/3) w/ twada | fukabori.fm回でログレベルについて、あのt_wadaさんがお話してくれていましたので、その内容について自身の感想なども交えつつまとめてみたいと思います!

いきなりまとめ

t_wadaさんは各レベルにおいて、以下のように使い分けをされてきたとのことでした。

Debugレベル

  • 基本的に開発者しか見ない
  • 本番のログでは出力されない
  • console.log("ここは通るはず") みたいな感じ

Infoレベル

  • 正常系の定常処理のログ
  • 「何も問題なく終わったよ」というような内容を出力
  • infoログが出ていることをもって、正常に動いていることを確認するなど
    • それなりに時間のかかるバッチ処理で、Step1 Sart Step1 Endのように各ステップが正常に進んでいることを出力したりとか
    • 10万件ごとに処理が終わっていることを出力したりとか

Warningレベル

  • 準正常系みたいなもの
  • 「結果として正常系の範囲だけど、何かおかしいことがあったぞ」という内容を出力する
    • ファイルがあればファイルを読み取った内容を文字列で返す。なければNullを返すといった処理において
    • FileNotFoundErrorのような例外を握りつぶしたという事実を出力したり

Errorレベル

  • エラーとか例外が出たときに同時に使うことが多い
  • エラーをハンドリングする時にこのレベルで出すようなイメージ

Fatalレベル

  • 人間が何か対応しないといけない時に出す
  • エラーが発生しても自動でリカバリできる場合には使わない
    • 複数のDBやトランザクションを管理しているシステム
    • 片方のDBで不整合が起きている時に、その状態を人間が手で直す(運用でカバー)ような場合など
    • ちなみにt_wadaさんの時代だとこのレベルのログが出た時にポケベルがなっていたらしい

感想と私のこれまでの運用経験

大変申し訳ないことに「全面的に同意」という感想で、私もこれまでの現場でこのように運用してきたことが多いと思います。

長いバッチ処理でinfoレベルのログを見ながら「あ。今Step3まで終わったのか」と確認していたのを思い出します。

ただ「t_wadaさんが言語化して話してくれている」という事実が非常に重要で、ログレベルの運用ガイドラインについて困ることがあれば一つの思想として「このポッドキャストでt_wadaさんは〜」と案内することができます。

今回のようにfukabori.fmのt_wadaさん回はとても学びのあることが非常に多いので、ぜひみなさん他の回も聞いてみてください!

【参考】

Qiitaの以下の記事でもログレベルについて触れられていて、非常に勉強になります。大体の考え方は共通しているように思えますね。