全般

[Python] loggingモジュールでログのレベルを設定する方法

今回は、Pythonのloggingモジュールでログのレベルを設定する方法についてご紹介します。

Pythonのloggingモジュールとは

Pythonのloggingモジュールは、プログラムの動作状況やエラー情報などを出力するための標準ライブラリです。

開発や運用において非常に便利で、ログを残すことで問題の原因特定や進捗確認を容易にします。

ログにはログレベルという優先度を示す概念があり、これを活用することで必要なメッセージのみを抽出したり、出力先を振り分けたりできます。

ログレベルを設定する方法

ログレベルとは、ログメッセージの重要度を表す仕組みです。

Pythonのloggingモジュールには、DEBUGINFOWARNINGERRORCRITICALの5種類が標準で用意されています。

ログレベルは整数値で管理されており、設定した閾値以上の重要度を持つログのみが出力されます。

ロガーでのレベル設定

ロガーとはログを生成する主体で、logging.getLogger()で取得します。

取得したロガーはsetLevel()によってログレベルを設定できます。

たとえば以下のように、ロガーを作成してDEBUG以上のログを受け付ける設定を行います。

ハンドラでのレベル設定

ハンドラとは、ログを実際にどこへ出力するかを管理するクラスです。

console(標準出力)向けやファイル向けなど、複数のハンドラを追加できます。

ハンドラにもsetLevel()があるため、ロガー側とハンドラ側の両方でログレベルを設定する点が重要です。

例えば、コンソールにはDEBUG以上を出力し、ファイルにはWARNING以上のみを出力するといった使い分けが可能です。

loggingの基本的な使い方例

basicConfigを使った簡易設定

loggingモジュールのbasicConfig()を使うと、簡単にログレベルやフォーマットを設定できます。

上記の例では、DEBUGレベル以上の全てのメッセージがコンソールに出力されます。

実行すると、下記のようなログが表示されます。

実行結果

2025-02-18 12:00:00 – DEBUG – これはデバッグメッセージです
2025-02-18 12:00:00 – INFO – これは情報メッセージです
2025-02-18 12:00:00 – WARNING – これは警告メッセージです
2025-02-18 12:00:00 – ERROR – これはエラーメッセージです
2025-02-18 12:00:00 – CRITICAL – これは致命的なメッセージです

カスタムロガーと複数ハンドラを用いた設定

もう少し細かく制御したい場合は、ロガーとハンドラを個別に設定します。

コンソールにはDEBUG以上の全てのログが表示されますが、app.logファイルにはWARNING以上のログのみが出力されます。

よくあるエラーと対処法

loggingモジュールを利用する際には、いくつかのエラーや問題に遭遇する場合があります。

  • basicConfig()の複数回呼び出しによる設定無視:最初の呼び出しのみが有効で、2回目以降の呼び出しは無視されるので注意が必要です。
  • ハンドラの重複追加:同じロガーに複数回ハンドラを追加すると、ログが重複出力されることがあります。不要な重複を避けるため、ハンドラ追加の箇所は一度だけにしてください。
  • FileHandlerでのファイルパスエラー:指定したパスが存在しないときや権限が不足している場合、ファイルの作成・書き込みに失敗することがあります。

これらを把握したうえで、ロガーとハンドラの設定を適切に行うことが大切です。

まとめ

Pythonのloggingモジュールを活用すれば、開発や運用において重要なログを管理しやすくなります。

ロガーとハンドラの両面でレベル設定を行うことで、目的に応じた適切なログを効率よく出力できます。

複数の設定方法やよくあるエラーを把握しながら、最適なログ設計を行ってみてください。