Отключите gunicorn glogger и используйте конфигурацию Django LOGGING - PullRequest
0 голосов
/ 05 апреля 2020

У меня проблемы с правильной настройкой ведения журнала gunicorn и Django для совместной работы. Мне удалось заставить gunicorn передавать ошибки типа 404 /favicon.ico в мой журнал Django, однако я не могу поймать другие уровни, независимо от того, что я передаю как --log-level для gunicorn.

Вот loggers раздел в моем settings.py

'loggers': {
        'django': {
            'handlers': ['console', 'django_info_file', 'django_error_file'],
            'propagate': True,
        },
        'gunicorn.access': {
            'level': 'INFO',
            'handlers': ['gunicorn_access'],
            'propagate': True,
            'qualname': 'gunicorn.access'
        },
        'gunicorn.error': {
            'level': 'INFO',
            'handlers': ['gunicorn_error'],
            'propagate': True,
            'qualname': 'gunicorn.error'
        }
    }

... и соответствующие обработчики

'handlers': {
        'console': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'django_info_file': {
            'level': 'INFO',
            'filters': ['require_debug_false'],
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, 'project_name/logs/django/info.log'),
            'formatter': 'verbose'
        },
        'django_error_file': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, 'project_name/logs/django/error.log'),
            'formatter': 'verbose'
        },
        'gunicorn_access': {
            'level': 'INFO',
            'filters': ['require_debug_false'],
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, 'project_name/logs/gunicorn/access.log'),
            'formatter': 'verbose'
        },
        'gunicorn_error': {
            'level': 'INFO',
            'filters': ['require_debug_false'],
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, 'project_name/logs/gunicorn/error.log'),
            'formatter': 'verbose'
        }
    },

Итак, что я пробовал до сих пор:

  • --log-level=debug
  • --log-file=-
  • --capture-output
  • --enable-stdio-inheritance
  • --access-logfile=-
  • --error-logfile=-

На стороне Django, которую я пробовал:

  • 'disable_existing_loggers': True, (оба True и False)
  • настройка DEBUG=True и False, чтобы убедиться, что require_debug_false работает

Я понял, что могу достичь того, чего хочу, с --log-config на стороне оружейного оружия, но мне было интересно, смогу ли я просто сделать Django обрабатывать ведение журнала на основе конфигурации LOGGER и переопределять gunicorn.error и gunicorn.access, используя logging или, в конечном итоге, glogging.

...