Я пытаюсь применить шаги интеграции Django, описанные для pybrake
, уведомителя об исключениях Python для Airbrake.Проект Django содержит несколько приложений, одно из которых называется lucy_web
.В моих расчетах я определил настройку AIRBRAKE
следующим образом:
AIRBRAKE = dict(
project_id=os.getenv('AIRBRAKE_API_KEY'),
project_key=os.getenv('AIRBRAKE_PROJECT_ID'),
environment=os.getenv('AIRBRAKE_ENVIRONMENT', default='production'),
root_directory=os.path.dirname(os.getcwd()))
Настройка LOGGING
:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
}
},
'handlers': {
'console': {
'level': os.environ.get('LOG_LEVEL', 'ERROR'),
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
},
'airbrake': {
'level': 'ERROR',
'class': 'pybrake.LoggingHandler',
}
},
'loggers': {
'django.db.backends': {
'level': os.environ.get('LOG_LEVEL', 'ERROR'),
'handlers': ['console'],
},
'lucy_web': {
'handlers': ['airbrake'],
'level': 'ERROR',
'propagate': True,
}
}
}
Обратите внимание, что я заменил ключ 'app'
в README от 'lucy_web'
, название одного из приложений в проекте.
Теперь, как я понимаю из документации по журналам Python (https://docs.python.org/3/library/logging.html), любой Logger
объект симя типа 'lucy_web.foo.bar'
должно распространяться на регистратор 'lucy_web'
и обрабатываться его обработчиком, который определен выше как pybrake.LoggingHandler
.
Чтобы проверить это, я попробовал следующий тест в lucy_web/tests/test_airbrake.py
:
import os
import logging
import pybrake
from django.test import SimpleTestCase
logger = logging.getLogger(__name__)
class AirbrakeTest(SimpleTestCase):
def test_1(self):
notifier = pybrake.Notifier(
project_id=os.getenv('AIRBRAKE_PROJECT_ID'),
project_key=os.getenv('AIRBRAKE_PROJECT_KEY'),
environment='production',
root_directory=os.path.dirname(os.getcwd()))
try:
raise ValueError("Hello")
except Exception as err:
notifier.notify(err)
def test_2(self):
logger.error("Foobar")
Первый тест - это более «многословный» подход, в котором непосредственно создается экземпляр pybrake.Notifier
, который позволяет отправить ошибку в Airbrake, как видно из нашей панели инструментов Airbrake:
Однако второй тест, основанный на интеграции журналирования, похоже, не отправляет никаких уведомлений в Airbrake. Разве это не должно быть так, как естьдолжен работать?