Создание собственного обработчика логов django.У объекта 'module' нет атрибута 'handlers' - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь создать обработчик ведения журнала на основе классов, который уведомляет какую-либо стороннюю службу, когда приложение видит исключение DisallowedHost, используя некоторые из встроенных конфигураций ведения журнала, предоставляемых django.

Однако я получаю конкретную ошибку import, которую не могу понять, как ее устранить.

Мои settings.py

LOGGING = {
    ...
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'notify_my_service': {
            'level': 'ERROR',
            'class': 'tools.exception_logging.NotifyMyServiceHandler'
        }
    },
    'loggers': {
        ...
        'django.security.DisallowedHost': {
            'handlers': ['notify_my_service'],
            'propagate': False,
        },
    },
}

Мой обработчик исключений:

import logging

class NotifyMyServiceHandler(logging.handlers.HTTPHandler):
    def emit(self, error):
        doSomething()

Большой трассировщик

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/django/utils/autoreload.py", line 227, in wrapper
    fn(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/runserver.py", line 117, in inner_run
    autoreload.raise_last_exception()
  File "/usr/local/lib/python2.7/dist-packages/django/utils/autoreload.py", line 250, in raise_last_exception
    six.reraise(*_exception)
  File "/usr/local/lib/python2.7/dist-packages/django/utils/autoreload.py", line 227, in wrapper
    fn(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/django/__init__.py", line 22, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/usr/local/lib/python2.7/dist-packages/django/utils/log.py", line 75, in configure_logging
    logging_config_func(logging_settings)
  File "/usr/lib/python2.7/logging/config.py", line 794, in dictConfig
    dictConfigClass(config).configure()
  File "/usr/lib/python2.7/logging/config.py", line 576, in configure
    '%r: %s' % (name, e))
ValueError: Unable to configure handler 'notify_my_service': 'module' object has no attribute 'handlers'

Итак, появляется логированиемодуль по какой-то причине не импортируется должным образом.Я пробовал примеры из других потоков, таких как импорт настроек в модуле обработчика исключений.

Можно ли таким способом написать пользовательские обработчики для входа в django?

1 Ответ

0 голосов
/ 08 января 2019

Когда я симулирую вашу ситуацию с кодом здесь, проблема, с которой я сталкиваюсь, связана с этим кодом, который выдает ошибки, потому что модуль logging не имеет атрибута handlers.

import logging

class NotifyMyServiceHandler(logging.handlers.HTTPHandler):
    def emit(self, error):
        doSomething()

Вам нужно импортировать модуль logging.handlers. Вам необходимо:

import logging.handlers

class NotifyMyServiceHandler(logging.handlers.HTTPHandler):
    def emit(self, error):
        doSomething()

К сожалению, модуль logging.config сообщает об ошибке, вызывая новое исключение, скрывающее оригинал.трассировка стека, что затрудняет поиск исходной ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...