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

Z. *_*Lin 9 python django exception sentry

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

小智 7

通过乌鸦来源阅读我看到如果你想忽略某些例外,你可以将它们添加到IGNORE_EXCEPTIONS这样:

RAVEN_CONFIG = {
    'dsn': '...',
    'IGNORE_EXCEPTIONS': ['exceptions.ZeroDivisionError', 'some.other.module.CustomException'],
    ...
}
Run Code Online (Sandbox Code Playgroud)

至于排除某些模块/文件,最好的方法可能是编写自己的客户端并决定是否向哨兵发送消息.它认为你应该覆盖该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)
Run Code Online (Sandbox Code Playgroud)

然后将您的自定义客户端设置为settings.py:

SENTRY_CLIENT = 'path.to.module.MyClient'
Run Code Online (Sandbox Code Playgroud)

如果你想要实现更复杂的忽略规则,你可能应该检查你可以用给定数据做什么(kwargs).