Pythonのloggingモジュールを使用してログファイルをローテートする方法について説明します。ログのローテートとは、新しい空のログファイルで追記を再開することを指します。
ログローテートの必要性
ソフトウェアの実行履歴を確認したり、問題発生時に原因を分析したりするのに、ログファイルは不可欠です。しかし、ログを単一のファイルに追記し続けると、ログファイルが極端に大きくなり、解析しづらくなります。あまりにファイルが大きくなると、コンピュータのメモリ不足でファイルを開けない場合すらあります。このような事態を防ぐため、それまでログを追記していたファイルを別の名前に移動し、新しい空のログファイルで追記を再開することを、「ログのローテート (回転)」と言います。
Pythonのloggingモジュール
loggingはPythonでログを出力したり、ログファイルを処理したりするのに便利なモジュールです。レベル (DEBUG, INFO, WARNなど)ごとのログ出力制御や、前述のローテート処理もサポートしています。
ログファイルとローテートする方法
以下に、Pythonのloggingモジュールを使用してログファイルをローテートするコード例を示します。
import logging
import logging.handlers
import time
logger = logging.getLogger()
logging.basicConfig(level=logging.INFO)
logger.addHandler(logging.handlers.RotatingFileHandler(filename='sample.log', maxBytes=100, backupCount=3))
i = 0
while True:
logger.info('log %d' % i)
i += 1
time.sleep(1)
このプログラムを実行すると、sample.logというログファイルが生成されます。ファイルサイズが100バイトを超過すると、sample.logはsample.log.1に名前変更され、新ファイルのsample.logにログが追記されていきます。さらに時間が経過すると、sample.log.1, sample.log.2, sample.log.3 の3世代のバックアップが作成されます。
以上がPythonのloggingモジュールを使用してログファイルをローテートする方法になります。この情報が役立つことを願っています。