\

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でのログ管理に役立つことを願っています。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です