Djangoから出力されるログをログローテーションしたい

実現したいこと

Django・uWSGI・nginx・LINUX環境でDjangoから出力されるログをログローテーションしたい。

前提

Django・uWSGI・nginx・LINUX環境でWebアプリを作成しています。
Djangoから出力されるログを日付ごとにまとめようと設定ファイルを以下のように設定しました。

settings.py

1 'handlers': { 2 'file': { 3 'level': 'INFO', 4 'class': 'logging.handlers.TimedRotatingFileHandler', 5 'filename': '{}/log/app_name/app.log'\ 6 .format(os.path.dirname(__file__)), 7 'formatter': 'production', 8 'when': 'MIDNIGHT' 9 }, 10 },

発生している問題

ただ実際に動作を確認してみると、uWSGIを起動した日時を基準に、常に同じファイル名を生成する形でローテートしてしまいます。
例:2023/10/27にuWSGIを起動した場合、28日にログを出力しても29日にログを出力しても、前日分が必ずapp.log.2023-10-27に上書きされてしまい一昨日以前のログがすべて消えてしまいます。

試したこと

loggingのローテートを使用しない以下のパターンを試してみましたが、同様に日付が変わってもuWSGIの起動日名のログファイルapp_2023-10-27.logに書き続ける結果となりました。

settings.py

1 'handlers': { 2 'file': { 3 'level': 'INFO', 4 'class': 'logging.FileHandler', 5 'filename': '{}/log/app_name/app_{}.log'\ 6 .format(os.path.dirname(__file__), datetime.now().date()), 7 'formatter': 'production' 8 }, 9 },

その他はTimedRotatingFileHandlerのinterval,backupCount等を設定したりwhenをMなどに変えて細かい動きを見てみましたが特に変化はありません。

補足情報

以下にuWSGIの実行時設定を記載します。(実行方法はuwsgi_app.serviceのExecStartを利用した方法を採用しています。)

uwsgi_app.service

1ExecStart=/home/app_home/.venv/bin/uwsgi \ 2 --http=:8888 \ 3 --processes=30 \ 4 --module=mysite.wsgi \ 5 --socket=/home/app_home/mysite/mysite/uwsgi.sock \ 6 --pidfile=/home/app_home/mysite/mysite/uwsgi.pid \ 7 --home=/home/app_home/.venv \ 8 --master \ 9 --vacuum

利用バージョン

Django 4.2.5
uWSGI 2.0.18-debian
nginx 1.18.0 (Ubuntu)
LINUX 5.15.0-1041-azure
Python 3.8.10

コメントを投稿

0 コメント