Как использовать интеграцию Pybrake Django от Airbrake? - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь применить шаги интеграции 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:

enter image description here

Однако второй тест, основанный на интеграции журналирования, похоже, не отправляет никаких уведомлений в Airbrake. Разве это не должно быть так, как естьдолжен работать?

...