Как отправить исключения для часового для проекта Django - PullRequest
0 голосов
/ 12 сентября 2018

Следуя инструкции Sentry Django Я настроил свой проект и развернул его.

Поэтому я настраиваю RAVEN_CONFIG со значением SENTRY_DSN и release, и включаю raven.contrib.django.raven_compat в мои INSTALLED_APPS.

Я подтвердил, что с этой конфигурациейСледующая команда будет правильно генерировать сообщение в часовом.

python manage.py raven test

Однако я создал следующее представление django, чтобы вызвать исключение в качестве альтернативного способа подтверждения того, что часовой работает, и когда я нажимаю на это представление, Я получаю ответ 500, но в часовом ничего не отображается.

app1 / views.py

def error(request):
    x = 1/0  # error for sentry testing

Я ожидаю, что Любое исключение (включая 500 ошибок), возникающее в django, будет отправлено часовому без необходимости использовать ведение журнала.

Правильно ли мое понимание конфигурации часового ворона?Или мне нужно настроить что-то еще?

Я использую настройку LOGGING в django, но в данный момент мне все равно, будут ли эти сообщения «ошибочными» или иным образом отправлены в часовой.Моя главная цель на данный момент - перехватить и отправить любое исключение, которое происходит на часовом.

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': '{asctime} [{levelname:5}] ({name}) {funcName}: {message}',
            'style': '{',
        }
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'formatter': 'standard',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'level': DJANGO_CORE_LOG_LEVEL,  # Change to DEBUG to see db queries
        },
        'app1': {
            'handlers': ['console'],
            'level': DJANGO_LOG_LEVEL,
            'propagate': True,
        },
        'app2': {
            'handlers': ['console'],
            'level': DJANGO_LOG_LEVEL,
            'propagate': True,
        }
    },
}

ОБНОВЛЕНИЕ

Мне удалось получить app1.views.errorвозможность сообщить об ошибке часовому при локальном использовании runserver , но после обновления конфигурации и ее развертывания при развертывании она все еще не работает.(manage raven test делает)

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Как сказал @Mehran после настройки вашего LOGGING в settings.py, вы сможете использовать ведение журнала. Давайте предположим, что у вас есть example в loggers в конфигурации, как;

'loggers': {        
    'example': {
        'handlers': ['console', 'sentry'],
        'level': 'DEBUG',
        'propagate': False
    }
}

Тогда,

import logging

logger = logging.getLogger("example")

def test():
    try:
       # some staff
    except Exception as error:
       logger.error("Custom Error Message %s" %error)

logger также имеют warn, info и т. Д.

0 голосов
/ 12 сентября 2018

Из сторожевых документов

LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'root': {
    'level': 'WARNING',
    'handlers': ['sentry'],
},
'formatters': {
    'verbose': {
        'format': '%(levelname)s  %(asctime)s  %(module)s '
                  '%(process)d  %(thread)d  %(message)s'
    },
},
'handlers': {
    'sentry': {
        'level': 'ERROR', # To capture more than ERROR, change to WARNING, INFO, etc.
        'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
        'tags': {'custom-tag': 'x'},
    },
    'console': {
        'level': 'DEBUG',
        'class': 'logging.StreamHandler',
        'formatter': 'verbose'
    }
},
'loggers': {
    'django.db.backends': {
        'level': 'ERROR',
        'handlers': ['console'],
        'propagate': False,
    },
    'raven': {
        'level': 'DEBUG',
        'handlers': ['console'],
        'propagate': False,
    },
    'sentry.errors': {
        'level': 'DEBUG',
        'handlers': ['console'],
        'propagate': False,
    },
},

}

Ссылка на документ: https://docs.sentry.io/clients/python/integrations/django/

РЕДАКТИРОВАТЬ: из комментария

try:
    do something
except Exception:
    from raven.contrib.django.raven_compat.models import client
    client.captureException()

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

...