【Python】loggingモジュールで簡単なログ出力からファイル記録
Pythonのloggingモジュールは、プログラムの動作やエラーを記録するための仕組みを提供します。このモジュールを使うと、コンソールやファイルにログを出力でき、デバッグやトラブルシューティングが簡単になります。
基本的な特徴
ログレベル: メッセージの重要度を指定できます。主なログレベルは以下の通りです:
- DEBUG: デバッグ情報
- INFO: 通常の動作に関する情報
- WARNING: 注意が必要な状態
- ERROR: エラーが発生した場合
- CRITICAL: 深刻なエラー
これらログをコンソール、ファイル、または外部システムに送信可能です。ログの出力形式をカスタマイズできます。
実例1:コンソールに出力
import logging # ログの基本設定 logging.basicConfig( level=logging.DEBUG, # ログレベルを指定 format="%(asctime)s - %(levelname)s - %(message)s" # 出力フォーマットを指定 ) # ログメッセージの出力 logging.debug("デバッグメッセージ") # logging.DEBUG指定なのでここからログに残される logging.info("情報メッセージ") logging.warning("警告メッセージ") logging.error("エラーメッセージ") logging.critical("重大なエラーメッセージ")
出力例
2024-12-04 22:47:34,813 - DEBUG - デバッグメッセージ 2024-12-04 22:47:34,813 - INFO - 情報メッセージ 2024-12-04 22:47:34,813 - WARNING - 警告メッセージ 2024-12-04 22:47:34,813 - ERROR - エラーメッセージ 2024-12-04 22:47:34,813 - CRITICAL - 重大なエラーメッセージ
実例2:ファイルに出力
import logging # ログの基本設定 logging.basicConfig( filename="app.log", # 出力先ファイル level=logging.ERROR, # ログレベルを指定 format="%(asctime)s - %(levelname)s - %(message)s" # 出力フォーマットを指定 ) # ログメッセージの出力 logging.debug("デバッグメッセージ") logging.info("情報メッセージ") logging.warning("警告メッセージ") logging.error("エラーメッセージ") # logging.ERROR指定なのでここからログに残される logging.critical("重大なエラーメッセージ")
出力例
応用例: カスタムロガーの作成
カスタムロガーを使うと、logging.basicConfigでは対応できない複雑なログ出力の要件に柔軟に対応できます。たとえば、異なる出力先へのログ記録や複数のフォーマットの同時使用が可能です。以下で、応用例として示したカスタムロガーの詳しい解説をします。
import logging # カスタムロガーの作成 logger = logging.getLogger("CustomLogger") logger.setLevel(logging.DEBUG) # コンソールハンドラの追加 console_handler = logging.StreamHandler() console_handler.setLevel(logging.INFO) # ファイルハンドラの追加 file_handler = logging.FileHandler("custom.log") file_handler.setLevel(logging.DEBUG) # フォーマッタの設定 formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") console_handler.setFormatter(formatter) file_handler.setFormatter(formatter) # ロガーにハンドラを追加 logger.addHandler(console_handler) logger.addHandler(file_handler) # ログの出力 logger.debug("カスタムロガーでのデバッグメッセージ") logger.info("カスタムロガーでの情報メッセージ") logger.warning("カスタムロガーでの警告メッセージ") logger.error("カスタムロガーでのエラーメッセージ") # logging.ERROR指定なのでここからログに残される logger.critical("カスタムロガーでの重大なエラーメッセージ")
それぞれのハンドラに対して異なるログレベルを設定できます。これにより、コンソールには重要なメッセージだけ、ファイルには詳細なログを記録する、といった使い分けが可能です。
実行するとコンソール出力とファイル出力を同時に実施してくれますが、コンソールはINFO以上、ファイルはDEBUG以上と分けて出力することができます。
スポンサーリンク