Pythonのloggingでログローテーションの機能とかない?

Pythonの標準ライブラリであるloggingモジュールには、ログローテーションの機能が組み込まれています。loggingモジュールを使ってログファイルのローテーションを行うには、logging.handlersモジュールのRotatingFileHandlerまたはTimedRotatingFileHandlerを使用します。

1. RotatingFileHandler

RotatingFileHandlerは、ログファイルが指定したサイズに達したときに新しいログファイルに切り替えます。

基本的な使い方

python
import logging from logging.handlers import RotatingFileHandler # ロガーの設定 logger = logging.getLogger('my_logger') logger.setLevel(logging.DEBUG) # ハンドラーの設定 handler = RotatingFileHandler('my_log.log', maxBytes=2000, backupCount=5) handler.setLevel(logging.DEBUG) # フォーマッターの設定 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) # ロガーにハンドラーを追加 logger.addHandler(handler) # ログの出力 for i in range(10000): logger.debug('This is log message %d', i)

パラメータ

  • maxBytes: ローテーションを行う最大ファイルサイズ(バイト単位)。
  • backupCount: 保持するバックアップファイルの数。

2. TimedRotatingFileHandler

TimedRotatingFileHandlerは、一定の時間が経過したときに新しいログファイルに切り替えます。

基本的な使い方

python
import logging from logging.handlers import TimedRotatingFileHandler # ロガーの設定 logger = logging.getLogger('my_logger') logger.setLevel(logging.DEBUG) # ハンドラーの設定 handler = TimedRotatingFileHandler('my_timed_log.log', when='midnight', interval=1, backupCount=7) handler.setLevel(logging.DEBUG) # フォーマッターの設定 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) # ロガーにハンドラーを追加 logger.addHandler(handler) # ログの出力 for i in range(100): logger.debug('This is log message %d', i)

パラメータ

  • when: ローテーションを行うタイミング。以下のオプションがあります。
    • 'S': 秒ごと
    • 'M': 分ごと
    • 'H': 時ごと
    • 'D': 日ごと
    • 'midnight': 毎日深夜
    • 'W0'-'W6': 週ごと(0は月曜日、6は日曜日)
  • interval: ローテーション間隔。whenパラメータと組み合わせて使います。
  • backupCount: 保持するバックアップファイルの数。

まとめ

  • RotatingFileHandlerは、ログファイルが指定されたサイズに達したときに新しいファイルにローテーションします。
  • TimedRotatingFileHandlerは、指定された時間間隔で新しいログファイルにローテーションします。

これらのハンドラーを使用することで、Pythonのloggingモジュールで簡単にログローテーションを設定・管理することができます。

未分類

Posted by ぼっち