非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【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以上と分けて出力することができます。

 

スポンサーリンク

 - Python