getsentry / getsentry/sentry-python

Make `ignore_logger()` accept a log level

Open
#4,706 4 comments 0 reactions 0 assignees View on GitHub
Feature Integration: Logging Logs Python
Dominant language
Python
Stars
2.2k
Forks
669
Avg merge
1d 1h
Merged PRs (30d)
213

Description

### Problem Statement

We've set `LoggingIntegration(level=logging.INFO, event_level=logging.ERROR, sentry_logs_level=logging.INFO)`, and we have a somewhat noisy dependency that does a lot of logging with pretty much the whole range of levels.

We want to avoid sending the DEBUG and INFO logs of that dependency to Sentry, **but** we'd still like logs with WARNING and above to be sent, which there doesn't seem to be any simple way of doing (other than e.g. providing both `before_breadcrumb` and `before_send_log` with a callback that does that filtering manually).

### Solution Brainstorm

Change the `ignore_logger()` implementation to something like:
```python
from logging import _checkLevel

_IGNORED_LOGGERS = {
"sentry_sdk.errors": logging.CRITICAL,
"urllib3.connectionpool": logging.CRITICAL,
"urllib3.connection": logging.CRITICAL,
}

def ignore_logger(
name, *, level_or_below=logging.CRITICAL
):
_IGNORED_LOGGERS[name] = _checkLevel(level_or_below)
```
and then change `_BaseHandler._can_record()` to:
```python
class _BaseHandler(logging.Handler):
def _can_record(self, record):
for logger, level_or_below in _IGNORED_LOGGERS.items():
if (
fnmatch(record.name.strip(), logger)
and record.levelno <= level_or_below
):
return False
return True
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.