getsentry / getsentry/sentry-python

Debug logs duplication due to incorrect configuration

Ouverte
#3,944 4 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Improvement Python
Langage dominant
Python
Étoiles
2.2k
Forks
669
Merge moyen
1 j 40 min
PR mergées (30 j)
212

Description

### How do you use Sentry?

Self-hosted/on-premise

### Version

2.19.2

### Steps to Reproduce

Sentry duplicates log records when you set debug mode via `sentry_sdk.init()` and configure handler in root logger only.

In my project I use `structlog` so full code example with it

```python
import logging
import sys

import structlog

LOG_LEVEL = logging.DEBUG

def remove_processors_meta(
_,
__,
event_dict,
):
del event_dict["_record"]
del event_dict["_from_structlog"]
event_dict.pop("positional_args", None)
return event_dict

structlog.configure_once(
processors=[
structlog.stdlib.ProcessorFormatter.wrap_for_formatter,
],
logger_factory=structlog.stdlib.LoggerFactory(),
wrapper_class=structlog.stdlib.BoundLogger,
cache_logger_on_first_use=True,
)
formatter = structlog.stdlib.ProcessorFormatter(
pass_foreign_args=True,
processors=[
structlog.stdlib.add_logger_name,
structlog.stdlib.add_log_level,
structlog.processors.TimeStamper(fmt="%Y-%m-%d %H:%M:%S", utc=True),
structlog.dev.set_exc_info,
remove_processors_meta,
structlog.dev.ConsoleRenderer(
event_key="message",
exception_formatter=structlog.dev.better_traceback,
),
],
)

handler = logging.StreamHandler(stream=sys.stdout)
handler.setFormatter(formatter)

root_logger = logging.getLogger()
root_logger.addHandler(handler)
root_logger.setLevel(LOG_LEVEL)

l = logging.getLogger(__name__)
l.info("test1", extra={"extra": "one"})

import sentry_sdk # must be after configuration of logging and structlog
from sentry_sdk.utils import logger

sentry_sdk.init("https://123@localhost/1", debug=True)
```

### Expected Result

Sentry does not write log records via own stream handler and use parent (root) logger configuration

Output:
```
2025-01-18 06:44:33 [info ] [__main__] event=test1
2025-01-18 06:44:33 [debug ] [sentry_sdk.errors] event=Setting up integrations (with default = True)
2025-01-18 06:44:33 [debug ] [sentry_sdk.errors] event=Did not import default integration sentry_sdk.integrations.anthropic.AnthropicIntegration: Anthropic not installed
```

Image

### Actual Result

Output:
```
[sentry] DEBUG: Setting up integrations (with default = True)
2025-01-18 06:11:54 [debug ] Setting up integrations (with default = True) [sentry_sdk.errors] func_name=setup_integrations module=__init__ pathname=/<...>/.venv/lib/python3.11/site-packages/sentry_sdk/integrations/__init__.py process=69509 process_name=MainProcess thread=8643448640 thread_name=MainThread
```

Image

### Possible fix

In `debug.py` we should change configuration check and use special logger method to check parent handlers too

from this
```python

def init_debug_support():
# type: () -> None
if not logger.handlers:
configure_logger()
```

to this

```python
def init_debug_support():
# type: () -> None

if not logger.hasHandlers(): # check parent handlers
configure_logger()

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.