在Django中使用sentry/raven:如何忽略某些异常?

9 投票
1 回答
3065 浏览
提问于 2025-04-18 13:38

我想让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)做些什么。

撰写回答