Где находится регистрация в моем приложении Django, запущенном с помощью uwsgi?

Я использую supervisor и uwsgi для запуска моего Django. Вот conf в supervisor.

[program:myapp]
directory=/home/users
command=uwsgi --ini uwsgi.ini
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=30
stderr_logfile=/var/log/supervisor/supervisor.log
stdout_logfile=/var/log/supervisor/supervisor.log

А это ini файл uwsgi

[uwsgi]
http-socket=0.0.0.0:8080
wsgi-file=myapp/wsgi.py
logformat=%(ltime) "%(method) %(uri) %(proto)" status=%(status) res-time=%(msecs)ms
logto=/var/log/supervisor/uwsgi.log

Таким образом, только метод, статус и время для ответа и т.д. перечислены следующим образом

14/Jan/2022:13:19:46 +0800 "GET /model/task/?taskid=e69a757974f811ec93e1f58ac6e34980&current=1&pageSize=10000&total=0&model_id=1 HTTP/1.1" status=200 res-time=107ms
14/Jan/2022:13:19:45 +0800 "POST /model/runmodel/ HTTP/1.1" status=200 res-time=3508ms

Я хочу, чтобы если я добавлю logging.info или logging.debug в мое приложение, оно также могло писать в файл журнала. Из doc по uwsgi кажется, что я не могу сделать это с помощью параметра logformat. Кто-нибудь знает, возможно ли это сделать?

Добрый день!

Вы правы, logformat обрабатывает только протоколирование uwsgi.

Если вы хотите, чтобы ваше приложение Django регистрировало события, вам нужно добавить 2 вещи:

  1. Обновление settings.py:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    "formatters": {
        "verbose": {
            "format": "[{asctime}] {levelname}: {name}.{message}",
            "style": "{",
        },
    },

    'handlers': {
         "console": {'level': 'DEBUG', "class": "logging.StreamHandler", "formatter": "verbose"},
    },
    "root": {
        "handlers": ["console"],
        "level": "DEBUG",
    },
}
  1. И добавьте следующие 3 строки кода в то место, где вы хотите вести журнал, как здесь, например:
from django.views.generic import TemplateView
from logging import getLogger # This 


logger = getLogger(__name__) # This

# Create your views here.
class IndexView(TemplateView):
    template_name = "index.html"

    def get(self, request, *args, **kwargs):
        logger.info("Index page requested") # And this
        return super().get(request, *args, **kwargs)

В результате получится следующее:

[2022-01-14 07:09:39,874] INFO: logged.views.Index page requested
14/Jan/2022:07:09:39 +0000 "GET / HTTP/1.1" status=200 res-time=18ms

Документация Django: https://docs.djangoproject.com/en/4.0/topics/logging

Проверьте исходный код: https://github.com/almazkun/uwsgi_logging

Вернуться на верх