如何防止哨兵捕获一些未捕获的异常事件和日志消息?
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 保持不变。
根据 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 保持不变。