
実現したいこと
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




回答1件
あなたの回答
tips
プレビュー