Search code examples
pythondjangosentry

How to ignore a logger in the Sentry Python SDK


I'm using sentry-python SDK for capture exceptions from my django server.

sentry capture

I don't want to capture django.security.DisallowedHost like above. How to remove sentry handling for that logger?

I attached my server configuration below.

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']}",
)

Solution

  • Quick answer

    See LoggingIntegration, eg:

    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
    

    A more elaborate but generic way to ignore events by certain characteristics

    See before_breadcrumb and before_send, eg:

    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)