カテゴリー
アーカイブ

10.04
2024

[Django] TimedRotatingFileHandler と RotatingFileHandler でログローテーション

  • LINE
前回の記事では、DjangoのLoggingについてを紹介しました。
今回は2種類の方法で、ログローテーションの設定をしてみたいと思います!

前回のロガーの設定ファイル(settings.py)

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '[%(asctime)s %(levelname)s] %(pathname)s %(lineno)d %(message)s',
        }
    },
    "handlers": {
        'myapp_log': {
            'formatter': 'verbose',
            'class': 'logging.FileHandler',
            'filename': '/var/log/myapp/myapp.log',
        },
        'django_log': {
            'formatter': 'verbose',
            'class': 'logging.FileHandler',
            'filename': '/var/log/myapp/django.log',
        },
    },
    "loggers": {
        "django": {
            "handlers": ["django_log"],
            "level": "ERROR",
            'propagate': False,
        },
        "myapp": {
            'handlers': ['myapp_log'],
            'level': 'DEBUG',
            'propagate': False,
        }
    }
}
この設定をベースに2種類ログローテーションの設定をしていきます。

TimedRotatingFileHandler (特定の時間間隔でのログローテーション)

日次でログローテーションされるように設定してみる

"handlers": {
       'myapp_log': {
            'formatter': 'verbose',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': '/var/log/myapp/myapp.log',
            'when': 'midnight',
            'interval': 1,
        },
       ...(省略)
    },

settings.pyのhandlers部分をこのように修正します。

指定した内容について

when : ログローテーションのタイミングを指定する。midnight=日付が変わるタイミング
backupCount : 保持させるバックアップファイル数を指定する。今回未指定としているが、その場合は日次で無限にログファイルが作成される。
・interval : インターバルを指定する。1のとき1日ごとにローテーションが行われる。

when の指定できるキーワード
'S' :
'M' :
'H' : 時間
'D' :
'W0'-'W6' : 曜日 (0=月曜)
'midnight' : atTime が指定されなかった場合は深夜に、そうでない場合は atTime の時刻にロールオーバーされる
myapp.log
myapp.log.2022-05-25
myapp.log.2022-05-26
myapp.log.2022-05-27
...

基準となるmyapp.log の後ろに日付が入ったファイルが作成されて、日次でローテーションされます。

RotatingFileHandler : 決められたサイズでファイルをローテーション

ファイルサイズが100バイトごとに、ローテーションさせる

 "handlers": {
       'myapp_log': {
            'formatter': 'verbose',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': '/var/log/myapp/myapp.log',
            'maxBytes': 100,
            'backupCount': 5,
        },
       ...(省略)
    },

settings.pyのhandlers部分をこのように修正。

指定した内容について

・maxBytes : ログファイルサイズの最大値を指定する。今回はファイルサイズが100バイトをを超えたときにログのローテーションが行われる。
・backupCount : 保持させるバックアップファイル数を指定する。
myapp.log
myapp.log.1
myapp.log.2
myapp.log.3
myapp.log.4
myapp.log.5

backupCountに5を指定しているので、myapp.log、myapp.log.1、myapp.log.2、...myapp.log.5 のログファイルでログがローテーションされます。

以上、特定の時間間隔でのログローテーションさせる方法と、ファイルサイズでログローテーションさせる方法でした!