ログを出さないプログラムは内部がどのように動いているのか。人が把握することは難しいです。
プログラムの動作がわからないと、「落ちた原因」「正常稼働しているのか」「性能問題が起きていないか」などなど知りたいことを知ることができない状態に陥ってしまいます。
そこで、ログ出力はわかりやすく出力したほうが良いということを説明していきたいと思いまます。
目次
ログの種類毎の書き方
ログの種類はおおまかに3種類あります。
開発用ログ(DEBUG)
状態表示用ログ(INFO)
エラーログ(ERROR)
それぞれを見ていきます。
開発用ログ(DEBUG)
開発用のログは、開発者が動作確認に使用するログです。
個人的にはDEBUGログは開発者が好きに仕込んでしまっても構わないと思います。
開発者目線で、内部状態を細かく把握するために仕込まれるので、
本番実行時にはDEBUGログは基本的に出力されないようにする必要があります。
現在ではライブラリなども豊富にあるため、困ることはないでしょう。
状態表示用ログ(INFO)
状態表示用ログは、運用時に状態を把握するために使用されるログです。
こちらについては、目的をしっかりと持つようにして、
最低限のログ出力でそれを満たすようにできないかを心がけていきましょう。
目的:通信の流れを把握したい
深堀り①:1通信だけ把握できれば目的を達成できるのでは?
手段:1通信の部分を切り抜いてログ出力させる
実装:外部からどの通信を切り抜くのか指定されたときに表示されるようにする
このように、ログを絞ることで、本当に必要なログのみを把握できるようになります。
エラーログ(ERROR)
エラーログは、問題発生時にのみ使用されるログです。
ここで意識しなければならないのは、原因追求のための情報が足りているかどうかです。
問題が発生したということは、それを直さなければなりません。
直すためには、どんな問題があったのかを正確に把握する必要があります。
問題:404の通信エラーが発生した
状態:404発生時に使用していたURL
404発生時にやりたかったこと(誰々さんが、〇〇をやろうとしていた)
外部からinputされたデータ
内部で取得したデータ
プログラムが自動で試みたこと:
5秒おきに3回リトライしたけどだめだった
エラーログだけを別ファイルにして〇〇のパスに出力済みだよ
このように、何が起こったのかなどを事細かにログ出力させるようにしておくことで、
エラー発生時に復旧が早くなるでしょう。
まとめ
ログ出力は種類ごとに書き方が異なります。エラー発生時のログについては最も丁寧に書き出せるようにしていたほうが良いでしょう。
各ログレベルごとの書き方を参考に私も含めてですが、少しでも分かりやすいログを心がけていきましょう。