与django的哨兵/乌鸦:如何忽略某些例外?

时间:2014-07-17 02:02:42

标签: python django exception sentry

我希望sentry / raven忽略来自某个函数或django模块的所有异常,但是查看文档和代码,我只看到了一个通过向其添加额外属性来忽略自定义异常的选项。有没有办法忽略函数名称或模块名称的异常?谢谢!

1 个答案:

答案 0 :(得分:7)

通过乌鸦来源阅读我看到如果您想忽略某些例外,可以将它们添加到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)。