如何防止哨兵捕获一些未捕获的异常事件和日志消息?

How can I prevent sentry from capturing events for some uncaught exceptions and logging messages?

根据 Sentry 的文档 [1][2] 对其新的统一 python sdk (sentry_sdk) 的建议,我已使用我的 Django 应用程序对其进行配置以捕获所有异常事件或 "error"级日志:

import sentry_sdk
import logging
from sentry_sdk.integrations.django import DjangoIntegration
from sentry_sdk.integrations.logging import LoggingIntegration

sentry_logging = LoggingIntegration(
    level=logging.DEBUG,
    event_level=logging.ERROR
)
sentry_sdk.init(
    dsn="{{sentry_dsn}}",
    integrations=[DjangoIntegration(), sentry_logging]
)

但是,由于它直接连接到 python 的日志记录模块和内部异常处理,这意味着任何使用此 Django 环境的东西都将向哨兵发送事件。有一些任务(例如交互式 manage.py 命令,或在 REPL 中工作)需要 Django 环境,但我 不想 想要在 Sentry 中创建事件。

有没有办法向哨兵表明我希望它 从异常或 logging 调用当前任务中捕获事件?或者在全局配置后暂时禁用它的方法?

也许有更好的方法,但您可以在任何文件中导入日志记录并像这样禁用它:logging.disable(logging.CRITICAL)。这将在等于或低于参数的级别禁用日志记录(因为 CRITICAL 是最高的,它将禁用所有日志记录)。

您可以再次 运行 sentry_sdk.init()(特别是没有 DSN)来禁用 SDK。

根据 .NET @ https://getsentry.github.io/sentry-dotnet/api/Sentry.SentrySdk.html#Sentry_SentrySdk_Init_System_String_ sentry_sdk.init() "An empty string is interpreted as a disabled SDK" 的文档。是的,我知道这是一个 Python 问题,但他们的 API 在不同语言中通常是一致的

派对已经很晚了,但是对于从 2021 年 4 月开始参加的任何人,您可以简单地:

import sentry_sdk
sentry_sdk.Hub.current.stop_auto_session_tracking()

调用 stop_auto_session_tracking() 将始终停止哨兵错误,只要您在 (1) 之后包含它 sentry_sdk.init (2) 在您的应用程序发生任何错误之前。

不带参数调用 init 的公认答案对我不起作用。

我必须明确传递一个空的 DSN:

import sentry_sdk
sentry_sdk.init(dsn="")

使用 sentry_sdk 0.19.1 测试:

>>> import sentry_sdk
>>> sentry_sdk.Hub.current.client.dsn
"https://...redacted...@sentry.io/..."
>>> sentry_sdk.init(dsn="")
>>> sentry_sdk.Hub.current.client.dsn
''

在不带参数调用 init 后,DSN 保持不变。