Python の logging
モジュールを使うと、プログラムの動作を追跡するためのログを記録できます。以下は、logging
モジュールの基本的な使い方について説明します。
基本的な使い方
まず、基本的な logging
の設定とメッセージの記録方法を記載します。
import logging
# ログの基本設定
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
# ログメッセージを記録
logging.debug('これはデバッグメッセージです。')
logging.info('これは情報メッセージです。')
logging.warning('これは警告メッセージです。')
logging.error('これはエラーメッセージです。')
logging.critical('これは重大なエラーメッセージです。')
logging.basicConfig()
を使ってロギングの基本設定を行うと、同じPythonアプリケーション内の他のモジュールにもその設定が反映されます。
basicConfig()
は一度だけ設定されるため、後から別のモジュールで再度呼び出しても再設定されることはありません。
具体的には、logging.basicConfig()
を呼び出すと、ルートロガーの設定が行われ、同じアプリケーション内の全てのロガーはこのルートロガーを継承します。
そのため、basicConfig()
で設定したフォーマットやレベルは、他のモジュールで作成されたロガーにも反映されます。
ログレベル
logging
モジュールでは、以下のログレベルがあります。
DEBUG
詳細な情報。主に問題を診断するときに使います。INFO
一般的な情報。プログラムの正常な動作を示します。WARNING
警告。プログラムの動作に支障はないが、注意が必要な状況。ERROR
エラー。プログラムが一部の機能を実行できない状況。CRITICAL
重大なエラー。プログラムが継続できない場合。
ログファイルへの出力
ログをファイルに書き込むには、basicConfig
の filename
パラメータを使います。
logging.basicConfig(filename='app.log', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
ロガーのカスタマイズ
より柔軟な設定を行いたい場合は、logging.getLogger
を使ってロガーを作成し、ハンドラやフォーマッタを設定します。
# ロガーの作成
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
# コンソールハンドラの作成
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# ファイルハンドラの作成
fh = logging.FileHandler('app.log')
fh.setLevel(logging.ERROR)
# フォーマッタの作成
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
fh.setFormatter(formatter)
# ハンドラをロガーに追加
logger.addHandler(ch)
logger.addHandler(fh)
# ログメッセージを記録
logger.debug('これはデバッグメッセージです。')
logger.info('これは情報メッセージです。')
logger.warning('これは警告メッセージです。')
logger.error('これはエラーメッセージです。')
logger.critical('これは重大なエラーメッセージです。')
この設定により、コンソールにはすべてのログメッセージが出力され、ファイルにはエラーレベル以上のメッセージが記録されます。
ハンドラの種類
logging
には、他にもさまざまなハンドラがあります。
StreamHandler
コンソールなどのストリームにログを出力します。FileHandler
ファイルにログを出力します。RotatingFileHandler
サイズに応じてログファイルをローテーションします。TimedRotatingFileHandler
時間に応じてログファイルをローテーションします。SMTPHandler
ログメッセージをメールで送信します。
これらを組み合わせることで、柔軟にログを管理することができます。