Sentry не показывает сообщения об ошибках deliciouspie

Я использую Django с deliciouspie и Sentry для отслеживания ошибок.

Проблема в том, что ошибки, возникающие для deliciouspie, не регистрируют сообщение об ошибке.

Они регистрируются с сообщением:

core.api.api_user.hydrate
Internal Server Error: /api/v1/test/123/ 

и должен зарегистрировать следующее сообщение:

core.api.api_user.hydrate
int() argument must be a string or a number, not 'dict'

и остальная часть Stacktrace.

это моя конфигурация ведения журнала проекта:

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',
            'class': 'raven.contrib.django.handlers.SentryHandler',
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        }
    },
    'loggers': {
        'django.request.tastypie': {
            "handlers": ["sentry"],
            "level": "ERROR",
            "propagate": False
        },
        'django.db.backends': {
            'level': 'ERROR',
            'handlers': ['console'],
            'propagate': False,
        },
        'raven': {
            'level': 'DEBUG',
            'handlers': ['console'],
            'propagate': False,
        },
        'sentry.errors': {
            'level': 'DEBUG',
            'handlers': ['console'],
            'propagate': False,
        },
    },
}

Некоторая идея, как я могу лучше регистрировать свои ошибки?

Джанго 1.4 Tastypie 0.9.11 часовой 3.5.7


person ken248000    schedule 17.07.2012    source источник


Ответы (3)


У меня почти такая же установка, как у вас, и она отлично работает. Что у меня отличается:

  1. Sentry 4.7.9, может быть это
  2. У меня нет в настройках явного логгера вкусного пирога, потому что вкусный логгер уже пишет ERROR, который обрабатывается обработчиком sentry.
  3. Я держу свой сервер на DEBUG=False. Если DEBUG=True, deliciouspie ничего не будет регистрировать, а просто выдаст сообщение об ошибке в ответ.
person Dmitry Shevchenko    schedule 17.07.2012

Даже регистрируя все в DEBUG, я не вижу журналов Sentry с этими 500 ошибками.

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        }
    },
    'loggers': {
        '': {
            'level': 'DEBUG',
            'handlers': ['console'],
        },
    }
}

Итак, в settings.py MIDDLEWARE_CLASSES я заменил raven.contrib.django.raven_compat.middleware.Sentry404CatchMiddleware на myproduct.middleware.SentryCatchMiddleware со следующей реализацией:

from raven.contrib.django.models import client
from raven.contrib.django.middleware import Sentry404CatchMiddleware
import logging

class SentryCatchMiddleware(Sentry404CatchMiddleware):
    def process_response(self, request, response):
        if response.status_code >= 500:
            data = client.get_data_from_request(request)
            data.update({
                'level': logging.ERROR,
                'logger': 'http500',
            })
            result = client.captureMessage(message='Internal Server Error: %s' % request.build_absolute_uri(), data=data)
            request.sentry = {
                'project_id': data.get('project', client.project),
                'id': client.get_ident(result),
            }
            return response
        return super(SentryCatchMiddleware, self).process_response(request, response)

Я хотел бы увидеть лучшее решение, хотя!

person ivy    schedule 11.03.2013
comment
Хм. На производстве ошибки регистрируются дважды. Так что это правда: DEBUG=True означает, что django.request.tastypie не регистрируется. - person ivy; 11.03.2013

Используйте параметр Tastypie TASTYPIE_FULL_DEBUG< /сильный>. При использовании Sentry/Raven, если вы установите для параметра TASTYPIE_FULL_DEBUG значение True, он будет регистрировать исключения, а основной параметр DEBUG будет контролировать результат.

person SleighBoy    schedule 15.07.2016