【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以上と分けて出力することができます。
スポンサーリンク
