如何忽略Sentry Python SDK中的记录器

kde*_*713 9 python django sentry

我正在使用sentry-pythonSDK从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']}",
)
Run Code Online (Sandbox Code Playgroud)

Mar*_*zer 13

快速回答

https://docs.sentry.io/platforms/python/logging/#ignoring-a-logger

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
Run Code Online (Sandbox Code Playgroud)

一种更精细但通用的方式,通过某些特征来忽略事件

参见https://docs.sentry.io/learn/breadcrumbs/?platform=python#breadcrumb-customization

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)
Run Code Online (Sandbox Code Playgroud)

  • @ kde713我已确定答案,请对ignore_errors单独提问,以保持本网站的清洁 (2认同)

小智 6

在 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
Run Code Online (Sandbox Code Playgroud)