【问题标题】:How to ignore a logger in the Sentry Python SDK如何忽略 Sentry Python SDK 中的记录器
【发布时间】:2019-03-26 09:51:48
【问题描述】:

我正在使用sentry-python SDK 从我的 django 服务器捕获异常。

我不想像上面那样捕获django.security.DisallowedHost。 如何删除该记录器的哨兵处理?

我在下面附上了我的服务器配置。

settings.py

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
       'null': {
            'level': 'DEBUG',
            'class': 'logging.NullHandler',
        },
    },
    'loggers': {
        # Silence SuspiciousOperation.DisallowedHost exception ('Invalid
        # HTTP_HOST' header messages). Set the handler to 'null' so we don't
        # get those annoying emails.
        'django.security.DisallowedHost': {
            'handlers': ['null'],
            'propagate': False,
        },
    }
}

sentry_sdk.init(
    dsn=os.environ['SENTRY_DSN'],
    integrations=[DjangoIntegration()],
    send_default_pii=True,
    release=f"{os.environ['STAGE']}@{os.environ['VERSION']}",
)

【问题讨论】:

    标签: python django sentry


    【解决方案1】:

    快速解答

    见LoggingIntegration,例如:

    from sentry_sdk.integrations.logging import ignore_logger
    
    
    ignore_logger("a.spammy.logger")
    
    logger = logging.getLogger("a.spammy.logger")
    logger.error("hi")  # no error sent to sentry
    

    通过某些特征忽略事件的更精细但通用的方法

    见before_breadcrumb和before_send,例如:

    import sentry_sdk
    
    def before_breadcrumb(crumb, hint):
        if crumb.get('category', None) == 'a.spammy.Logger':
            return None
        return crumb
    
    def before_send(event, hint):
        if event.get('logger', None) == 'a.spammy.Logger':
            return None
        return event
    
    sentry_sdk.init(before_breadcrumb=before_breadcrumb, before_send=before_send)
    

    【讨论】:

    • 1.我很抱歉我的问题中出现了错误。 security.DisallowedHost 也不例外。正是 Django 的记录器。如何使用 DjangoIntegration 忽略哨兵中的一些记录器?
    • @kde713 我修正了我的答案,请为 ignore_errors 提出一个单独的问题,以保持本网站的清洁
    • 此代码不起作用。我添加了您的代码并将a.spammy.Logger 替换为django.security.DisallowedHost。但是无效的 HTTP_HOST 仍然发送到哨兵。
    • 关于我刚刚通过的编辑:那是我修改自己的答案,但我忘了登录。较短的方式做同样的事情。
    【解决方案2】:

    在 sentry_sdk 下,我不得不在 before_send 中使用以下代码来让它忽略 django.security.DisallowedHost 异常。

    def before_send(event, hint):
            """Don't log django.DisallowedHost errors in Sentry."""
            if 'log_record' in hint:
                if hint['log_record'].name == 'django.security.DisallowedHost':
                    return None
    
            return event
    

    【讨论】:

      猜你喜欢
      • 2019-10-11
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      相关资源
      最近更新 更多