Записывать все запросы в файл Django
Когда я запускаю сервер разработки django (./manage.py runserver
) все запрошенные URL-адреса удобно записываются в стандартный вывод процесса с указанием точного времени и кода ответа:
[09/Jun/2016 23:35:53] "GET /api/game/ HTTP/1.1" 404 3185
[09/Jun/2016 23:36:01] "GET /api/game/123/ HTTP/1.1" 404 1735
Это очень удобно, потому что при анализе вывода вы сразу же видите запрос, соответствующий вашим сообщениям журнала, например:
WARNING:2016-06-09 23:41:27,806:views:7449:140139847718656: No such object in the database: u'123'
[09/Jun/2016 23:41:27] "GET /api/game/123/ HTTP/1.1" 404 1735
Раньше я работал с uwsgi + nginx, поэтому для всего я использовал обработчик логов 'console', а затем запустил uwsgi следующим образом:
exec uwsgi --master --die-on-term --logto /var/log/uwsgi.log
В результате я получил все необходимые логины/var/log/uwsgi.log
, записи запросов uwsgi и мои собственные сообщения регистрации.
Теперь я хочу добиться того же результата с помощью Apache + мод WSGI + django. Я хочу, чтобы единственный файл содержал все запросы и все журналы из моего приложения django в одном месте.
Я пытался добиться этого с помощью конфигурации ведения журнала Django, но даже когда я перенаправляю django.requests в тот же файл, я получаю только свои собственные сообщения в журналах, никаких запросов вообще. Вот часть конфигурации:
'handlers': {
'file_handler': {
'level': DEBUG and 'DEBUG' or 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': join(LOG_DIRECTORY, 'api_log.log'),
'maxBytes': 1024 * 1024 * 5, # 5 MB
'backupCount': 15,
'formatter': 'verbose',
},
},
'loggers': {
'api': {
'handlers': ['file_handler'],
'level': DEBUG and 'DEBUG' or 'INFO',
},
'django': {
'handlers': ['file_handler'],
'level': DEBUG and 'DEBUG' or 'INFO',
},
'django.request': {
'handlers': ['file_handler'],
'level': DEBUG and 'DEBUG' or 'INFO',
},
'django.db.backends': {
'handlers': ['file_handler'],
'level': DEBUG and 'INFO' or 'WARNING',
'propagate': False,
},
}
Есть ли способ достичь поведения логирования nginx + uwsgi + django с помощью apache + WSGI + django? Или единственный способ сохранить apache access.log и мои журналы в отдельных файлах?
Я думаю, в первом случае это был сервер разработки, который регистрировал запросы, а во втором случае это был процесс uwsgi. Может быть, есть способ заставить WSGIDaemonProcess сделать то же самое?