getsentry / getsentry/sentry-python

Make `ignore_logger()` accept a log level

オープン
#4,706 コメント 4 件 リアクション 0 件 担当者 0 名 GitHub で見る
Feature Integration: Logging Logs Python
主要言語
Python
スター
2.2k
フォーク
669
平均マージ
1日 40分
マージ済み PR(30日)
212

説明

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

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。