sentry/raven с django: как игнорировать определенные исключения?

Я бы хотел, чтобы sentry/raven игнорировал все исключения из определенной функции или модуля django, но, изучив документы и код, я увидел только возможность игнорировать пользовательское исключение, добавив к нему дополнительный атрибут. Есть ли способ игнорировать исключения по имени функции или имени модуля? Спасибо!


person Z. Lin    schedule 17.07.2014    source источник


Ответы (1)


Прочитав исходный код ворона, я увидел, что если вы хотите игнорировать определенные исключения, вы можете добавить их в IGNORE_EXCEPTIONS следующим образом:

RAVEN_CONFIG = {
    'dsn': '...',
    'IGNORE_EXCEPTIONS': ['exceptions.ZeroDivisionError', 'some.other.module.CustomException'],
    ...
}

Что касается исключения определенных модулей/файлов, то лучшим способом, вероятно, будет написать свой собственный клиент и решить, отправлять ли сообщение часовому. Он считает, что вам следует переопределить метод send, так как он содержит все данные в более доступной форме.

Вы можете сделать это следующим образом:

from raven.contrib.django.client import DjangoClient


class MyClient(DjangoClient):

    def send(self, **kwargs):
        '''
        check if culprit (event name) should be skipped
        '''
        if kwargs.get('culprit', '').startswith('my.module.to.skip'):
            self.logger.info('Skipping entry')
        else:
            return super(MyClient, self).send(**kwargs)

а затем установите свой собственный клиент в settings.py:

SENTRY_CLIENT = 'path.to.module.MyClient'

Если вы хотите реализовать более сложные правила игнорирования, вам, вероятно, следует проверить, что вы можете сделать с данными (kwargs).

person slafs    schedule 28.08.2014