Запросы журнала Django со статусом 200 в системный журнал

#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 в производстве, так что, надеюсь, я смогу регистрировать запросы. Спасибо!