getsentry / getsentry/sentry-python

Make `ignore_logger()` accept a log level

Aperta
#4,706 4 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Feature Integration: Logging Logs Python
Lingua principale
Python
Stelle
2.2k
Fork
669
Merge medio
1g 1h
PR unite (30g)
213

Descrizione

### 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
```

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.