@@ -209,6 +209,105 @@ def _instrumentation_failed_to_load_call(entry_point, dependency_conflict):
209209 "Skipping instrumentation %s: %s" , entry_point , dependency_conflict
210210 )
211211
212+ @patch .dict ("os.environ" , {"OTEL_LOG_LEVEL" : "debug" }, clear = True )
213+ @patch ("opentelemetry.instrumentation.auto_instrumentation._load._logger" )
214+ @patch ("opentelemetry.instrumentation.auto_instrumentation._load.stderr" )
215+ def test_writes_diagnostic_debug_output (
216+ self , stderr_mock , logger_mock
217+ ):
218+ logger_mock .isEnabledFor .return_value = True
219+ logger_mock .hasHandlers .return_value = False
220+
221+ _load ._debug ("Instrumented %s" , "requests" )
222+
223+ logger_mock .debug .assert_called_once_with (
224+ "Instrumented %s" , "requests"
225+ )
226+ stderr_mock .write .assert_called_once_with (
227+ "DEBUG:"
228+ "opentelemetry.instrumentation.auto_instrumentation._load:"
229+ "Instrumented 'requests'\n "
230+ )
231+ stderr_mock .flush .assert_called_once ()
232+
233+ @patch .dict ("os.environ" , {"OTEL_LOG_LEVEL" : "trace" }, clear = True )
234+ @patch ("opentelemetry.instrumentation.auto_instrumentation._load._logger" )
235+ @patch ("opentelemetry.instrumentation.auto_instrumentation._load.stderr" )
236+ def test_writes_diagnostic_trace_output (self , stderr_mock , logger_mock ):
237+ logger_mock .isEnabledFor .return_value = True
238+ logger_mock .hasHandlers .return_value = False
239+
240+ _load ._debug ("Instrumented %s" , "requests" )
241+
242+ logger_mock .debug .assert_called_once_with (
243+ "Instrumented %s" , "requests"
244+ )
245+ stderr_mock .write .assert_called_once_with (
246+ "DEBUG:"
247+ "opentelemetry.instrumentation.auto_instrumentation._load:"
248+ "Instrumented 'requests'\n "
249+ )
250+ stderr_mock .flush .assert_called_once ()
251+
252+ @patch .dict ("os.environ" , {"OTEL_LOG_LEVEL" : "debug" }, clear = True )
253+ @patch ("opentelemetry.instrumentation.auto_instrumentation._load._logger" )
254+ @patch ("opentelemetry.instrumentation.auto_instrumentation._load.stderr" )
255+ def test_does_not_write_diagnostic_when_logger_handles_debug (
256+ self , stderr_mock , logger_mock
257+ ):
258+ logger_mock .isEnabledFor .return_value = True
259+ logger_mock .hasHandlers .return_value = True
260+
261+ _load ._debug ("Instrumented %s" , "requests" )
262+
263+ logger_mock .debug .assert_called_once_with (
264+ "Instrumented %s" , "requests"
265+ )
266+ stderr_mock .write .assert_not_called ()
267+ stderr_mock .flush .assert_not_called ()
268+
269+ @patch .dict ("os.environ" , {"OTEL_LOG_LEVEL" : "info" }, clear = True )
270+ @patch ("opentelemetry.instrumentation.auto_instrumentation._load._logger" )
271+ @patch ("opentelemetry.instrumentation.auto_instrumentation._load.stderr" )
272+ def test_does_not_write_diagnostic_non_debug_output (
273+ self , stderr_mock , logger_mock
274+ ):
275+ _load ._debug ("Instrumented %s" , "requests" )
276+
277+ logger_mock .debug .assert_called_once_with (
278+ "Instrumented %s" , "requests"
279+ )
280+ stderr_mock .write .assert_not_called ()
281+ stderr_mock .flush .assert_not_called ()
282+
283+ @patch .dict ("os.environ" , {"OTEL_LOG_LEVEL" : "debug2" }, clear = True )
284+ @patch ("opentelemetry.instrumentation.auto_instrumentation._load._logger" )
285+ @patch ("opentelemetry.instrumentation.auto_instrumentation._load.stderr" )
286+ def test_does_not_write_numbered_debug_output (
287+ self , stderr_mock , logger_mock
288+ ):
289+ _load ._debug ("Instrumented %s" , "requests" )
290+
291+ logger_mock .debug .assert_called_once_with (
292+ "Instrumented %s" , "requests"
293+ )
294+ stderr_mock .write .assert_not_called ()
295+ stderr_mock .flush .assert_not_called ()
296+
297+ @patch .dict ("os.environ" , {"OTEL_LOG_LEVEL" : "debugger" }, clear = True )
298+ @patch ("opentelemetry.instrumentation.auto_instrumentation._load._logger" )
299+ @patch ("opentelemetry.instrumentation.auto_instrumentation._load.stderr" )
300+ def test_does_not_prefix_match_diagnostic_debug_output (
301+ self , stderr_mock , logger_mock
302+ ):
303+ _load ._debug ("Instrumented %s" , "requests" )
304+
305+ logger_mock .debug .assert_called_once_with (
306+ "Instrumented %s" , "requests"
307+ )
308+ stderr_mock .write .assert_not_called ()
309+ stderr_mock .flush .assert_not_called ()
310+
212311 @patch .dict (
213312 "os.environ" ,
214313 {OTEL_PYTHON_DISABLED_INSTRUMENTATIONS : " instr1 , instr3 " },
0 commit comments