diff --git a/litellm/integrations/otel/logger.py b/litellm/integrations/otel/logger.py index 107532f6b55..2353472aefa 100644 --- a/litellm/integrations/otel/logger.py +++ b/litellm/integrations/otel/logger.py @@ -939,7 +939,10 @@ def fan_out_provider() -> ApiTracerProvider: if published is not None: return published logger: Final = _registered_v2_logger() - return logger.tracer_provider if logger is not None else get_tracer_provider() + if logger is not None: + attach_tenant_fan_out(logger.tracer_provider, logger.config) + return logger.tracer_provider + return get_tracer_provider() @contextmanager diff --git a/tests/test_litellm/integrations/otel/test_otel_v2_destinations.py b/tests/test_litellm/integrations/otel/test_otel_v2_destinations.py index ec8834f5ec7..fbda890da88 100644 --- a/tests/test_litellm/integrations/otel/test_otel_v2_destinations.py +++ b/tests/test_litellm/integrations/otel/test_otel_v2_destinations.py @@ -706,7 +706,7 @@ class TestProviderWiring: assert fan_out_provider() is v2.tracer_provider assert deliverable_destinations((LANGFUSE_DEST,), fan_out_provider()) == (LANGFUSE_DEST,) - def test_without_a_publish_anchoring_uses_a_registered_v2_logger(self, monkeypatch): + def test_without_a_publish_anchoring_attaches_fan_out_to_registered_v2_logger(self, monkeypatch): from litellm.proxy import proxy_server config = OpenTelemetryV2Config(exporters=[ExporterSpec(kind="in_memory", owner=ExporterOwner.LANGFUSE_OTEL)]) @@ -714,6 +714,7 @@ class TestProviderWiring: monkeypatch.setattr(proxy_server, "open_telemetry_logger", logger) assert fan_out_provider() is logger.tracer_provider + assert deliverable_destinations((LANGFUSE_DEST,), fan_out_provider()) == (LANGFUSE_DEST,) def test_without_a_publish_anchoring_falls_back_to_the_otel_global(self, monkeypatch): from opentelemetry import trace