Pythonのloggingモジュール入門:効果的なログ記録の基本

この記事では、Pythonの標準ライブラリであるloggingモジュールについて解説します。print文によるデバッグと異なり、loggingモジュールはイベントの重要度に応じたメッセージのフィルタリングや、出力をファイルに保存する機能などを提供し、より体系的で管理しやすいプログラムの記録を残すことができます。


目次

loggingモジュールの基本設定と使い方

loggingモジュールを使い始めるには、まずlogging.basicConfig()で基本的な設定を行います。level引数で記録するログの最低レベルを、format引数でログメッセージの書式を定義します。

以下の例では、階乗を計算する関数の実行過程をlogging.debug()で記録しています。

import logging

# ログの基本設定
logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')

logging.debug('プログラム開始')

def calculate_factorial(n):
    logging.debug(f'factorial({n})開始')
    total = 1
    # 0を掛けると結果が0になるため、1から始める
    for i in range(1, n + 1):
        total *= i
        logging.debug(f'i = {i}, total = {total}')
    logging.debug(f'factorial({n})終了')
    return total

print(calculate_factorial(5))
logging.debug('プログラム終了')

このスクリプトを実行すると、関数の各ステップでの変数の状態が、タイムスタンプやログレベルと共に出力されます。


ログレベル

loggingモジュールには5つの主要なログレベルがあり、重要度の低い順に並んでいます。

  1. DEBUG: 問題の診断時に役立つ詳細な情報。
  2. INFO: 想定通りに物事が動作していることの確認。
  3. WARNING: 想定外のことが発生した、または将来の問題を示す兆候(例: ディスク容量の低下)。
  4. ERROR: より深刻な問題により、プログラムが一部の機能を実行できなかった。
  5. CRITICAL: プログラム自体の実行継続が不可能な、深刻なエラー。

basicConfigで設定したレベル以上の重要度を持つメッセージのみが出力されます。例えば、level=logging.INFOと設定した場合、DEBUGメッセージは表示されず、INFO, WARNING, ERROR, CRITICALメッセージが表示されます。


ログメッセージの無効化

logging.disable()を呼び出すと、それ以降のログメッセージを抑制できます。引数には無効化したいログレベルを指定し、そのレベル以下のすべてのログメッセージが非表示になります。

import logging

logging.basicConfig(level=logging.INFO, format=' %(asctime)s -  %(levelname)s -  %(message)s')

logging.critical('これは表示される致命的エラー')

# CRITICALレベル以下のすべてのログを無効化
logging.disable(logging.CRITICAL)

logging.critical('これは表示されない致命的エラー')
logging.error('これも表示されないエラー')

ファイルへのログ出力

ログメッセージをコンソールではなくファイルに保存したい場合は、basicConfigfilename引数を指定します。

import logging

# ログの出力先を'program_log.txt'ファイルに設定
logging.basicConfig(filename='program_log.txt', level=logging.DEBUG, format='%(asctime)s -  %(levelname)s -  %(message)s')

logging.info('このメッセージはコンソールではなく、ファイルに書き込まれます。')

このスクリプトを実行すると、コンソールには何も表示されませんが、カレントディレクトリにprogram_log.txtが作成され、その中にログメッセージが記録されます。

まとめ

loggingモジュールは、プログラムの動作を追跡するための柔軟なフレームワークです。ログレベルによるメッセージのフィルタリング、出力フォーマットのカスタマイズ、そして出力先をコンソールからファイルへ切り替える機能などを提供します。デバッグやアプリケーションの監視において、print文よりもはるかに強力で体系的な方法です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次