12
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python ログローテーションの時間経過による設定方法

Posted at

はじめに

プログラムの実行中に発生するログを、時間経過で自動的にローテーションする方法を紹介します。ログファイルが大きくなりすぎないように、定期的に新しいファイルに切り替えることは、ログ管理において非常に重要です。今回は Python の logging モジュールを使い、時間経過に基づいたログローテーションの実装方法を解説します。

ログローテーションとは?

ログローテーションは、プログラムの実行中に記録されるログを、一定の基準で新しいファイルに切り替える技術です。時間経過(例:毎日、毎時)やファイルサイズの上限などでログを分割することができます。

ログローテーションの種類

ファイルサイズによるローテーション:指定されたファイルサイズを超えると、新しいログファイルを生成。 時間経過によるローテーション:指定された時間ごとに新しいログファイルを生成。 今回は、時間経過によるローテーションに焦点を当てて説明します。

必要なモジュール

Python 標準の logging モジュールに加え、TimedRotatingFileHandler を使用します。

import logging
from logging.handlers import TimedRotatingFileHandler

ログローテーションの設定

以下のコードは、1日ごとにログファイルがローテーションされる例です。

詳細は割愛しますが

# ロガーの設定
logger = logutil.setup_logging(log_dir)

def setup_logging(log_dir):
# 既存のハンドラーをクリア
logger = logging.getLogger(__name__)
logger.handlers.clear()

log_level_file = 'DEBUG'
detail_formatting = '%(asctime)s %(levelname)-8s [%(module)s# %(lineno)d] %(message)s'

# ログレベル設定
logger.setLevel(getattr(logging, log_level_file))

# ファイルローテーションハンドラー設定
file_handler = TimedRotatingFileHandler(
    log_dir,
    when='D',
    interval=1,
    backupCount=5,
    encoding='utf-8'
)
file_formatter = logging.Formatter(detail_formatting)
file_handler.setFormatter(file_formatter)

logger.addHandler(file_handler)

return logger
	

TimedRotatingFileHandler の引数

filename:ログファイルの名前。例:my_log.log

when:ローテーションの時間単位。midnight(深夜)、H(毎時)など。

interval:指定した時間単位の間隔。例:interval=1 と when="midnight" は1日ごと。

backupCount:古いログファイルを保持する数。

例:
backupCount=7 とすると過去7日分のログファイルが保存されます。

ローテーションのタイミング

when="midnight" を指定した場合、毎日深夜0時に新しいログファイルが作成されます。

ログファイルの命名ルール TimedRotatingFileHandler は、ローテーションしたファイルにタイムスタンプを追加します。例えば、my_log.log はローテーション時に

my_log.log.2023-09-06

という形式になります。

苦戦した箇所

もし誤って拡張子をつけてしまった場合、ログローテーションでファイル名に二重に拡張子が付いてしまうことがあります

(例:my_log.log.2023-09-06.log)。

拡張子をつけるとローテンションで削除されないことが発覚

image.png

ですので、ログのfile_nameは拡張子付けずに!!!

12
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?