Возможность создания пользовательских отчетов об ошибках в 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 справится с этой задачей.
Я работаю над асинхронным логгером с открытым исходным кодом, который упрощает ведение логов. Мне бы пригодились пожелания по функциям, предложения. Хорошего дня. Надеюсь, ответ помог.