Pythonのlogging
モジュールは、プログラムの開発をした際にログ出力し、障害時の際に状況を把握できるようにすることが非常に重要です。特に、業務アプリケーションといった常時動作しているシステムの場合、ログファイルが常に出力されるのでログファイルが肥大化し、ディスクの容量を圧迫してしまいシステム全体の動作に影響を与える可能性があります。その場合には、ログローテーションすることで回避します。
Pythonではロギングのモジュールとしてlogging
が用意されています。logging
にはハンドラというものがありますが、TimedRotatingFileHandler
を使用することで指定した時間でのログローテーションを実現することができます。
以下に、TimedRotatingFileHandler
の使用例を示します。
import logging.handlers
import time
def main():
# ロギングの基本設定
formatter = "%(asctime)s:%(levelname)s:%(name)s:%(message)s"
logging.basicConfig(level=logging.INFO, format=formatter, encoding="utf_8")
# ロガーの作成
logger = logging.getLogger(__name__)
# ログレベルをDEBUGへ変更
logger.setLevel(logging.DEBUG)
# ログローテーションのハンドラーを設定
# when: intervalの単位 ('S':秒、'M':分、'H':時間、'D':日、'W0'-'W6':曜日 (0=月曜))
# interval: ログローテーション間隔
# backupCount: バックアップとして保持するログファイル数
h = logging.handlers.TimedRotatingFileHandler(
"test.log",
when="S",
interval=20,
backupCount=5
)
# フォーマットを設定
h.setFormatter(logging.Formatter(formatter))
# ロガーにハンドラーを設定
logger.addHandler(h)
for _ in range(1000):
time.sleep(0.1)
logger.debug("log rotation test")
if __name__ == "__main__":
main()
このコードは、指定した時間(when="S", interval=20
)ごとにログファイル("test.log"
)をローテーションし、バックアップとして5つのログファイルを保持します。このようにTimedRotatingFileHandler
を使用することで、Pythonのlogging
モジュールを使って指定した時間でログローテーションを行うことができます。
以上がPythonのlogging
モジュールとTimedRotatingFileHandler
の使い方についての説明です。この情報がPythonでのログ管理に役立つことを願っています。