Open
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
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

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

Possible fix
In debug.py
we should change configuration check and use special logger method to check parent handlers too
from this
def init_debug_support():
# type: () -> None
if not logger.handlers:
configure_logger()
to this
def init_debug_support():
# type: () -> None
if not logger.hasHandlers(): # check parent handlers
configure_logger()
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
No status