Python
Django
uwsgi
wsgi

[Django]ログローテートの設定方法

Djangoのログローテートの設定方法。

今回は日付単位でローテートしたいと思う。
ログの種類は以下を用意している。

  • access
  • debug
  • info
  • warn
  • error

handlersの項目に以下を設定する。

  • 'class': 'logging.handlers.TimedRotatingFileHandler'
  • 'when': 'D'
  • 'interval': 1

※他にも設定できる項目などはある。
 Pythonドキュメント - TimedRotatingFileHandler

project_name = "hoge"

LOGGING = {
    ...(省略),
    'formatters': {
        'default': {
            'format': ...(省略)
        }
    },
    'handlers': {
        'debug': {
            'level': 'DEBUG',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': '/var/log/wsgi/{}/debug.log'.format(project_name),
            'when': 'D',
            'interval': 1, 
            'formatter': 'default',
        },
        'info': {
            'level': 'INFO',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': '/var/log/wsgi/{}/info.log'.format(project_name),
            'when': 'D',
            'interval': 1, 
            'formatter': 'default',
        },
        'access': {
            'level': 'INFO',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': '/var/log/wsgi/{}/access.log'.format(project_name),
            'when': 'D',
            'interval': 1, 
            'formatter': 'default',
        },
        'warn': {
            'level': 'WARNING',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': '/var/log/wsgi/{}/warn.log'.format(project_name),
            'when': 'D',
            'interval': 1, 
            'formatter': 'default',
        },
        'error': {
            'level': 'ERROR',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': '/var/log/wsgi/{}/error.log'.format(project_name),
            'when': 'D',
            'interval': 1, 
            'formatter': 'default',
        },
    },
    'loggers': {
        'app.debug': {
            'handlers': ['debug'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'app.info': {
            'handlers': ['info'],
            'level': 'INFO',
            'propagate': True,
        },
        'app.access': {
            'handlers': ['access'],
            'level': 'INFO',
            'propagate': True,
        },
        'app.warn': {
            'handlers': ['warn'],
            'level': 'WARNING',
            'propagate': True,
        },
        'app.error': {
            'handlers': ['error'],
            'level': 'ERROR',
            'propagate': True,
        },
    },
}

また、uWSGIの起動などを記録するログはiniファイルなどに以下の項目を追加してログローテート対応できる。

logto=/var/log/wsgi/default.log.@(exec://date +%%Y-%%m-%%d)
log-reopen=true