在Django中使用sentry/raven:如何忽略某些异常?
我想让sentry/raven忽略某个特定函数或django模块产生的所有错误。但是我查看了文档和代码,只看到一个选项是通过给自定义错误添加额外的属性来忽略它。有没有办法通过函数名或模块名来忽略错误呢?谢谢!
1 个回答
7
在阅读raven的源代码时,我发现如果你想忽略某些异常,可以把它们添加到 IGNORE_EXCEPTIONS
里,像这样:
RAVEN_CONFIG = {
'dsn': '...',
'IGNORE_EXCEPTIONS': ['exceptions.ZeroDivisionError', 'some.other.module.CustomException'],
...
}
至于排除某些模块或文件,最好的办法可能是自己写一个客户端,决定是否要把消息发送给sentry。我觉得你应该重写 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)做些什么。