Pythonでログをファイル出力する方法

Pythonでログをファイル出力する方法

Pythonでログをファイルに出力する方法は、logging モジュールを使用することで実現できます。
このモジュールは、ログの記録、出力先の設定、ログメッセージのフォーマットなど、ログ処理に関する様々な機能を提供しています。

まず、logging モジュールをインポートします。
基本的な設定を行い、ログをファイルに出力するための手順を以下に示します。

import logging

# ログの設定
logging.basicConfig(
  filename='example.log',   # ログファイルの名前
  level=logging.DEBUG,      # ログレベル(DEBUG以上のレベルが記録される)
  format='%(asctime)s - %(levelname)s - %(message)s'  # ログメッセージのフォーマット
)

# ログメッセージの記録
logging.debug('これはデバッグメッセージです')
logging.info('これは情報メッセージです')
logging.warning('これは警告メッセージです')
logging.error('これはエラーメッセージです')
logging.critical('これは致命的エラーメッセージです')

このコードでは、basicConfig 関数を使用してログの設定を行っています。
filename パラメータには、ログメッセージを出力するファイル名を指定します。
level パラメータには、記録するログのレベルを設定します。
ここでは logging.DEBUG を指定しており、DEBUGレベル以上のメッセージ(DEBUG、INFO、WARNING、ERROR、CRITICAL)が記録されます。
format パラメータには、ログメッセージの形式を指定します。
例では、タイムスタンプ、ログレベル、メッセージが含まれる形式にしています。

次に、ログを出力するためのファイルハンドラを使った設定方法について説明します。
複数のファイルにログを出力したり、ログの出力形式をカスタマイズしたりする場合には、FileHandler を使用します。

import logging

# ロガーの作成
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)

# ファイルハンドラの設定
file_handler = logging.FileHandler('example.log')
file_handler.setLevel(logging.DEBUG)

# ログフォーマッタの設定
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)

# ハンドラをロガーに追加
logger.addHandler(file_handler)

# ログメッセージの記録
logger.debug('これはデバッグメッセージです')
logger.info('これは情報メッセージです')
logger.warning('これは警告メッセージです')
logger.error('これはエラーメッセージです')
logger.critical('これは致命的エラーメッセージです')

この方法では、getLogger 関数を使ってロガーを作成し、FileHandler を用いてログファイルへの出力を設定します。
ファイルハンドラには、ログのレベルとフォーマットを設定することができます。
addHandler メソッドを使用して、ロガーにファイルハンドラを追加します。
これにより、ログメッセージは指定したファイルに記録され、フォーマットも適用されます。

さらに、RotatingFileHandler や TimedRotatingFileHandler を使用することで、ログファイルが一定サイズに達した際にファイルをローテーションさせたり、一定の時間ごとに新しいファイルを作成したりすることもできます。
これにより、ログファイルの管理が容易になります。

from logging.handlers import RotatingFileHandler

# ロガーの作成
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)

# ローテーティングファイルハンドラの設定
rotating_handler = RotatingFileHandler('example.log', maxBytes=2000, backupCount=5)
rotating_handler.setLevel(logging.DEBUG)

# ログフォーマッタの設定
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
rotating_handler.setFormatter(formatter)

# ハンドラをロガーに追加
logger.addHandler(rotating_handler)

# ログメッセージの記録
logger.debug('これはデバッグメッセージです')
logger.info('これは情報メッセージです')
logger.warning('これは警告メッセージです')
logger.error('これはエラーメッセージです')
logger.critical('これは致命的エラーメッセージです')

RotatingFileHandler の maxBytes パラメータでログファイルの最大サイズを指定し、backupCount でローテーション後に保持するバックアップファイルの数を指定します。
これにより、指定サイズに達したログファイルが自動的にローテーションし、古いログファイルが削除されます。

このようにして、Pythonでは logging モジュールを用いることで、ログをファイルに記録し、様々な設定でログ管理を行うことができます。