今回は、Pythonのloggingモジュールでログのレベルを設定する方法についてご紹介します。
Pythonのloggingモジュールとは
Pythonのloggingモジュールは、プログラムの動作状況やエラー情報などを出力するための標準ライブラリです。
開発や運用において非常に便利で、ログを残すことで問題の原因特定や進捗確認を容易にします。
ログにはログレベルという優先度を示す概念があり、これを活用することで必要なメッセージのみを抽出したり、出力先を振り分けたりできます。
ログレベルを設定する方法
ログレベルとは、ログメッセージの重要度を表す仕組みです。
Pythonのloggingモジュールには、DEBUG、INFO、WARNING、ERROR、CRITICALの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モジュールを活用すれば、開発や運用において重要なログを管理しやすくなります。
ロガーとハンドラの両面でレベル設定を行うことで、目的に応じた適切なログを効率よく出力できます。
複数の設定方法やよくあるエラーを把握しながら、最適なログ設計を行ってみてください。