ログレベル設計とローテーション:アプリがDEBUG/INFO... ノート

ログレベル設計とローテーション:アプリがDEBUG/INFO/WARNING/ERRORを使用する理由

アプリケーションログは、DEBUG、INFO、WARNING、ERRORといった様々なラベルを使用しており、これらは主にフィルタリングの閾値として機能します。Pythonのloggingモジュールは、DEBUG(10)のきめ細かな詳細から、アプリケーションの失敗を示すCRITICAL(50)まで、5つのレベルを定義しています。ロガーのレベルをINFOに設定すると、数値が20以上のメッセージのみが記録されます。これにより、開発者は通常の運用ログを煩雑にすることなく、詳細な診断ステートメントを埋め込み、調査が必要な場合にのみそれらを有効にすることができます。例示されているアプリケーション、maintenance_agent.pyは、ログ出力をRotatingFileHandlerとStreamHandlerにルーティングし、初期設定はINFOにされているため、通常はDEBUGメッセージは抑制されます。アプリケーション内のログ呼び出しの分布は、その設計上の想定を反映しており、INFOは進捗、WARNINGは回復可能な問題、ERRORは実際の障害に使用されます。CRITICALは、アプリケーションがサイト固有の障害を独立して処理するように設計されているため、使用されていません。RotatingFileHandlerによって実装されるログローテーションは、最大サイズとバックアップ数を設定することで、ログファイルが無制限に大きくなるのを防ぎます。このメカニズムにより、ログ履歴は過剰なディスク容量を消費することなく保存されます。別のハンドラ、_SiteLogCaptureは、個々のサイトメンテナンス実行のための一時的なログを収集し、レポートやメールを生成した後、破棄します。これは、複数のハンドラが同じログストリームを異なる目的(長期履歴対一時的な特定の使用)のために処理できることを示しています。ログレベルは詳細さに対する垂直フィルタとして機能し、ハンドラの選択は対象者と目的に対する水平フィルタとして機能します。