
2026/03/04 6:15
ログメッセージは、主にご利用いただくソフトウェアを操作される方々向けのものです。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
ログメッセージは、開発者だけでなく運用担当者を想定して記述すべきです。
運用担当者にとって実行可能な価値がないログエントリは省略するか、明確な文脈を提供できるよう書き直してください。
- 開発者は頻度の低いまたは低レベルのエラーについて詳細なログを書きやすく、それがシステム管理者にとってビューを煩雑にします。
- 分散環境や長期運用では、運用担当者が元の開発者であるとは限りません。そのため、すべてのログはコードを理解していない人にも有益な情報を伝える必要があります。
- 有効なログは、何が起こったかとエラーの原因(予期された失敗経路かそれとも未確認の問題か)を簡潔に説明します。
- プログラムが異常終了した場合には、管理者が即座に問題を診断できるよう、原因を明示するメッセージを出力すべきです。
- システム管理者は期待されるエラーのログを利用して障害やメール処理など特定のイベントを追跡します。MTAs が各 DNS ルックアップや接続試行を詳細に記録するような冗長なエントリは、個々の項目をトレースする際に役立ちます。
目的は、開発者が不在でも実行可能な情報を提供できるログ設計であり、価値のないメッセージをデフォルトで削除または書き直すことです。このシフトは運用担当者に迅速なトラブルシューティングをもたらし、企業がより保守性の高いソフトウェアを開発しサポートコストを削減する助けとなり、業界全体をオペレーター中心のロギング慣行へと導く可能性があります。
本文
ログメッセージは主にソフトウェアを運用する人のためです
2026年3月2日
最近、イーヴァン・ハーンの The two kinds of error(via)を読んだところ、そこではロギングについて非常に簡潔に触れられており、その一文が私に考えさせました。以前、システム管理者の視点から「エラーログレベル」が何を意味すべきかを書いたことがありますが、その記述はログメッセージについての根本的な側面を省いています:ほとんどの場合、ロギングはソフトウェアを運用する人々向けです。デバッグ以外のログメッセージを追加しようとするときに自問すべき質問の一つが、「このメッセージを見ることでプログラムを実行している人は何を得るのか?」ということです。
私自身の経験から、開発者(あるいはスクリプトを書いているあなた)向けに書くログやその他のメッセージは非常に簡単に作成できます。デバッグ用であったり、プログラムの状態を追跡するために役立つ情報を含めることが自然ですし、開発者自身がプログラム内部に浸っているためすべてのコンテキストを持っています。このような状況は、頻度の低いエラーメッセージで特に問題になりがちで、私はそのメッセージをできるだけ冗長にすることにしています。ログをあまり頻繁に出力しない場合も同様です。しかし、ソフトウェアが成功し(特に他者に配布される場合)、実際にそれを運用している人々は開発者ではなく、単に操作しているだけのケースがほとんどです。これには数か月間そのソフトウェアに触れていないあなた自身が将来担当する可能性も含まれます。
「診断できるか?」というメールで送られる以外にログメッセージを有用にしたいのであれば、運用者にとって役立つ情報を提供しなければなりません。これは「修正が必要であるエラーのみを報告する」という意味ではありません(それも一部です)。同時に、ログ経由で伝える情報は運用者にとって有益かつ意味のあるものにすべきであり、魔法のデコーダリングなしでも理解できるようにすべきです。
もし運用者がログメッセージを見ることで何も得られないのであれば、デフォルトではそのメッセージを出力しない方がよいでしょう(あるいは内容を書き直して人々が価値を見出せるようにする必要があります)。イーヴァン・ハーンの用語で言えば、これは予期されたエラーと予期しないエラーの両方に当てはまります。ただし、プログラムが中断した場合は、システム管理者に「なぜ停止したか」を必ず伝えるべきです。
システム管理者にとって、予想されるエラーについてのログは何が失敗を引き起こしたのかを診断する手がかりとなります。関心度はそれらがどれだけ頻繁に発生するかによっても左右されます。しかし、それが唯一の要因ではありません。多くのMTA(メール転送エージェント)は、メッセージ処理時の比較的冗長なログを持ち、「DNSルックアップできない」や「リモートマシンに接続できない」といった予想されるエラーをすべて記録します。これは非常に有用であり、特定のメールメッセージがどこまで処理されたか、何が起きたかを知りたい場合に重要です。