代码之家  ›  专栏  ›  技术社区  ›  user85461

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

  •  3
  • user85461  · 技术社区  · 7 年前

    [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环境的东西都将把事件传递给sentry。有些任务(如interactive manage.py命令或在REPL中工作)需要Django环境,但我需要 想要在哨兵中创建事件。

    有没有办法向哨兵表明我愿意 从异常或 logging 调用当前任务?或者在全局配置之后临时禁用它的方法?

    2 回复  |  直到 7 年前
        1
  •  5
  •   Markus Unterwaditzer    7 年前

    你可以跑了 sentry_sdk.init() (特别是没有DSN)再次禁用SDK。

        2
  •  0
  •   Dmitry M    7 年前

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

        3
  •  0
  •   CAD bloke    7 年前

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

        4
  •  0
  •   jaitaiwan    5 年前

    派对已经很晚了,但是对于2021年4月来参加派对的人,你可以:

    import sentry_sdk
    sentry_sdk.Hub.current.stop_auto_session_tracking()
    

    呼叫 stop_auto_session_tracking() 总是会停止哨兵错误,只要你包括它(1)后,你做 sentry_sdk.init (2) 在应用程序出现任何错误之前。

        5
  •  0
  •   A B    5 年前

    我必须显式地传递一个空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
    ''
    

    推荐文章