如何防止哨兵捕获某些未捕获的异常事件并记录消息?

时间:2018-10-12 00:16:17

标签: python django logging sentry

按照Sentry的文档[1] [2]对于新的统一python sdk(sentry_sdk)的建议,我已使用Django应用程序对其进行配置,以捕获所有异常或“错误”事件“级别的日志:

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调用中的事件?还是在全局配置后暂时禁用它?

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

根据.NET @ https://getsentry.github.io/sentry-dotnet/api/Sentry.SentrySdk.html#Sentry_SentrySdk_Init_System_String_ sentry_sdk.init()的文档,“将空字符串解释为已禁用的SDK”。是的,我知道这是一个Python问题,但是它们的API在不同语言之间通常是一致的

答案 3 :(得分:0)

参加聚会很晚,但对于 2021 年 4 月之后参加聚会的任何人,您只需:

import sentry_sdk
sentry_sdk.Hub.current.stop_auto_session_tracking()

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

答案 4 :(得分:0)

在没有参数的情况下调用 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 保持不变。