如何忽略 Sentry 捕获中的某些 Python 错误

Cer*_*rin 6 python django celery sentry

我已将 Sentry 配置为从 Django+Celery 应用程序捕获所有错误。它工作正常,但我发现一个令人讨厌的用例是当我必须重新启动我的 Celery 工作器、PostgreSQL 数据库或消息服务器时,这会导致成千上万种“无法访问数据库/消息服务器”错误。这会污染哨兵报告,有时甚至超过我的活动配额。

他们的文档提到了一个“ignore_exceptions”参数,但我没有在他们旧的弃用客户端中使用它,也不建议将其用于新项目。您将如何在新 API 中执行此操作?

Mar*_*zer 8

您可以使用before-send按任意条件过滤错误。由于不清楚您实际想要过滤的内容,这里有一个按类型过滤的示例。但是,您可以使用自定义逻辑对其进行扩展,例如按异常消息进行匹配。

import sentry_sdk

def before_send(event, hint):
    if 'exc_info' in hint:
        exc_type, exc_value, tb = hint['exc_info']
        if isinstance(exc_value, (IgnoredErrorFoo, IgnoredErrorBar)):
            return None
    return event

sentry_sdk.init(before_send=before_send)
Run Code Online (Sandbox Code Playgroud)


A. *_*son 7

我花了一些源码才找到它,但新 SDK 中的选项是“ignore_errors”。它需要一个可迭代对象,其中每个元素可以是字符串或类型(如旧接口)。

我毫不犹豫地链接到它,因为它可能在任何时候改变,但一个内部方法,这里 是它在我的时间写这快照。

作为一个例子(重新实现马库斯的答案):

import sentry_sdk

sentry_dsk.init(ignore_errors=(IgnoredErrorFoo, IgnoredErrorBar))
Run Code Online (Sandbox Code Playgroud)