@@ -148,36 +148,29 @@ def test_no_trace_correlation_outside_span(self, log_exporter):
148148
149149
150150class TestLogProviderClashingProvider :
151- """When another library claims the global LoggerProvider first, our processor
152- must still be attached so logs reach the SAP OTLP endpoint ."""
151+ """When the platform pre- claims the global LoggerProvider, we merge our resource
152+ attributes into it and leave its processor chain intact ."""
153153
154- def test_logs_reach_our_exporter_when_provider_already_set (self , monkeypatch ):
154+ def test_logs_flow_through_existing_provider_with_sdk_resource (self , monkeypatch ):
155155 from opentelemetry ._logs import _internal as _logs_internal
156156 from opentelemetry .sdk ._logs .export import InMemoryLogRecordExporter , SimpleLogRecordProcessor
157157 import sap_cloud_sdk .core .telemetry ._provider as provider_module
158158
159- # Reset OTel singleton
160159 _logs_internal ._LOGGER_PROVIDER_SET_ONCE ._done = False
161160 _logs_internal ._LOGGER_PROVIDER = None
162161 provider_module ._log_provider = None
163162
164- # Remove stale LoggingHandlers
165163 root = logging .getLogger ()
166164 for h in list (root .handlers ):
167165 if isinstance (h , LoggingHandler ):
168166 root .removeHandler (h )
169167
170- # Simulate another library claiming the provider first
171168 external_exporter = InMemoryLogRecordExporter ()
172169 external_provider = LoggerProvider ()
173170 external_provider .add_log_record_processor (SimpleLogRecordProcessor (external_exporter ))
174171 from opentelemetry ._logs import set_logger_provider
175172 set_logger_provider (external_provider )
176173
177- # Now our SDK runs setup_log_provider
178- our_exporter = InMemoryLogRecordExporter ()
179- monkeypatch .setattr ("sap_cloud_sdk.core.telemetry._provider._create_log_exporter" , lambda : our_exporter )
180- monkeypatch .setattr ("sap_cloud_sdk.core.telemetry._provider.BatchLogRecordProcessor" , SimpleLogRecordProcessor )
181174 monkeypatch .setattr (
182175 "sap_cloud_sdk.core.telemetry._provider.get_config" ,
183176 lambda : __import__ (
@@ -196,11 +189,12 @@ def test_logs_reach_our_exporter_when_provider_already_set(self, monkeypatch):
196189 root .setLevel (logging .DEBUG )
197190 logging .getLogger ("test.clash" ).warning ("hello from sdk" )
198191
199- our_records = external_exporter .get_finished_logs ()
200- assert len (our_records ) == 1
201- assert our_records [0 ].log_record .body == "hello from sdk"
192+ records = external_exporter .get_finished_logs ()
193+ assert len (records ) == 1
194+ assert records [0 ].log_record .body == "hello from sdk"
195+ # Resource merge must have happened — sap.cloud_sdk.* attrs prove it
196+ assert records [0 ].resource .attributes .get ("sap.cloud_sdk.language" ) == "python"
202197
203- # Cleanup
204198 for h in list (root .handlers ):
205199 if isinstance (h , LoggingHandler ):
206200 root .removeHandler (h )
0 commit comments