#python #django #logging
#python #django #ведение журнала
Вопрос:
Я пишу приложение Django и использую базовую маршрутизацию URL для просмотров. Я пытаюсь реализовать ведение журнала в системный журнал. Я хочу регистрировать все входящие запросы в системный журнал. Мой LOGGING
дикт выглядит так:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'formatters': {
'verbose': {
'format': '%(process)-5d %(name)s:%(lineno)d %(levelname)s %(message)s'
},
'simple': {
'format': '[%(asctime)s] %(name)s %(levelname)s %(message)s',
'datefmt': '%d/%b/%Y %H:%M:%S'
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'syslog': {
'level': 'DEBUG',
'class': 'logging.handlers.SysLogHandler',
'facility': 'local7',
'address': '/dev/log',
'formatter': 'verbose'
},
},
'loggers': {
'django.server': {
'handlers': ['console', 'syslog'],
'level': 'INFO',
'propagate': False
},
'my_project': {
'handlers': ['console', 'syslog'],
'level': 'INFO',
'propagate': False,
},
# root logger
'':{
'handlers': ['console', 'syslog'],
'level': 'INFO',
'disabled': False
},
},
}
Всякий раз, когда я нажимаю на любой URL-адрес на сервере, в консоль регистрируется следующее:
[01/Oct/2016 18:30:34] "POST /api/v1/users/login/ HTTP/1.1" 200 73
Но в моем файле журнала ничего нет.
Когда я вставляю a logger.error('Something went wrong!')
в свой код, он регистрируется в моем файле журнала.
Как мне получить журнал запросов в моем файле журнала?
TIA
Ответ №1:
Запросы журнала от django к системному журналу зависят от нескольких факторов:
- Конфигурация системного журнала. Я предполагаю, что ваша конфигурация системного журнала верна, и системный журнал не удаляет отладочные сообщения из local7.
- Если вы запускаете свое приложение с помощью «runserver», django использует встроенный облегченный http-сервер. Этот сервер регистрирует сообщения запроса. До версии 1.10 он использовался для входа в sys.stderr, и это было невозможно настроить с помощью LOGGING dict . В django 1.10 это изменилось, чтобы использовать механизм ведения журнала python: https://docs.djangoproject.com/en/1.10/ref/django-admin/#django-admin-runserver
- Например, если вы запускаете свое приложение с использованием nginx uwsgi, запросы на ведение журнала обрабатываются nginx / uwsgi.
Комментарии:
1. Я использую Django 1.7, поэтому, думаю, я не смогу получить журнал запросов в моем файле журнала с помощью runserver. Что ж, я буду использовать nginx uwsgi в производстве, так что, надеюсь, я смогу регистрировать запросы. Спасибо!