Возможность создания пользовательских отчетов об ошибках в Django

Я настроил переменную ADMINS в settings.py. Я настроил свою электронную почту, и все работает как положено. Я получаю очень хорошее, подробное сообщение об ошибке с моего производственного ящика, когда он сталкивается с ошибкой. Я также понимаю переменную MANAGERS и то, как она может обрабатывать 404 ошибки и отправлять предупреждения. Хорошо, отлично... Однако у меня есть другой случай, когда я хочу отправить отчет об ошибке (стандартный 500 подробный отчет) ряду лиц на основе приложения, в котором произошла ошибка (или по умолчанию, если это не конкретное приложение). Допустим, у меня есть 1 человек, разрабатывающий/поддерживающий webapp1, и 2 человека, поддерживающих webapp2. Если ошибка возникает в webapp2, я хочу отправить сообщение только этим двум людям, а если в webapp1, то человеку, разрабатывающему/поддерживающему это приложение. Если ошибка возникает не в конкретном приложении, я бы отправил всем, кто определен в переменной ADMINS.

Во-первых, есть ли лучший способ решения этой проблемы, чем пользовательский процесс обработки ошибок? и... Во-вторых, возможно ли это в рамках возможностей пользовательских ошибок?

Django использует Python's Standard Logging Module; вероятно, следует неявно ответить, как они реализуют настраиваемое поведение логирования. Python имеет отличную документацию по логированию документацию, книги и how-tos.

Q. Как отправить журналы спецификации приложения только его сопровождающим?

В приведенном ниже примере мы не будем углубляться в специфику логгеров, LogRecords, форматоров, обработчиков или поведения Django при записи логов. LogRecords распространяются на их родительский каталог. Разработчик i.e __author__, поддерживающий __package__ необходимо записать логгер project_level в файл settings.py. Предположим, что tutorial - это пакет, который поддерживает разработчик.

.
├── manage.py
├── requirements.txt
└── tutorial
    ├── asgi.py
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

1 directory, 7 files

Сфокусируемся на обработчиках, логгерах django и, возможно, фильтрах для краткости.

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        """
        another alternate handler like this inside the package.
        Where custom behavior is implemented. key: value pair 
        dictionary. Option to pass extra paramater is the handler 
        class needs one. """                             
        
                                                      |. # there logRecord will propapagte up
                                                      |. # you can to it's parent dir. Your 
                                                      |. # project root where you'll handle it.
                                                      |...project/
                                                      |... __init__.py
                                                      |... logging.py
        'Ninja': {                                    |...    class NinjalFilter:
                                                      |...        raise NotImplementedError
            '()': 'project.logging.NinjalFilter',                                      
            'key': 'value',
        },
    },
    'handler': {
        'mail_admins': {
            'level': 'ERROR',  # 4XX (ERROR) or 5XX (Warning) Your Wish
            'class': 'django.utils.log.AdminEmailHandler',
            'filters': ['special']
        },
    },
    'logger': { 
        """
        This is where django implements some of it's own customization. Not in the standard Library. 
        https://docs.djangoproject.com/en/4.0/ref/logging/#default-logging-configuration
        """
        'YouCustomLogger': {
            'handlers': ['mail_admins', 'NinjaProjectMaintainerAdmins'],
            'level': 'INFO', # Again 4XX (ERROR) or 5XX (Warning) Your Wish
            'filters': ['Ninja']
        }
    }
}

CustomNinjaLogger какие настройки передавать вашим специальным обработчикам Ninja Filtered LogRecords To main_admins, и вашим собственным NinjaProjectMaintainerAdminsHandler. Обратите внимание, что вам могут не понадобиться пользовательские handler, NinjaProjectMaintainerAdminHandler, если встроенный mail_admins справится с этой задачей.


Я работаю над асинхронным логгером с открытым исходным кодом, который упрощает ведение логов. Мне бы пригодились пожелания по функциям, предложения. Хорошего дня. Надеюсь, ответ помог.

Вернуться на верх