1414
1515# pylint: disable=protected-access
1616import gc
17+ import logging
1718import multiprocessing
1819import os
1920import time
2728import pytest
2829from pytest import mark
2930
31+ from opentelemetry ._logs import set_logger_provider
3032from opentelemetry .sdk ._logs import (
3133 LogData ,
34+ LoggerProvider ,
35+ LoggingHandler ,
3236 LogRecord ,
3337)
3438from opentelemetry .sdk ._logs .export import (
3539 BatchLogRecordProcessor ,
3640)
41+ from opentelemetry .sdk .resources import Resource
3742from opentelemetry .sdk .util .instrumentation import InstrumentationScope
3843
3944EMPTY_LOG = LogData (
@@ -88,7 +93,7 @@ def test_telemetry_exported_once_schedule_delay_reached(
8893 exporter .export .assert_called_once_with ([telemetry ])
8994
9095 def test_telemetry_flushed_before_shutdown_and_dropped_after_shutdown (
91- self , batch_processor_class , telemetry , caplog
96+ self , batch_processor_class , telemetry
9297 ):
9398 exporter = Mock ()
9499 batch_processor = batch_processor_class (
@@ -107,8 +112,6 @@ def test_telemetry_flushed_before_shutdown_and_dropped_after_shutdown(
107112
108113 # This should not be flushed.
109114 batch_processor .emit (telemetry )
110- assert len (caplog .records ) == 1
111- assert "Shutdown called, ignoring" in caplog .text
112115 exporter .export .assert_called_once ()
113116
114117 # pylint: disable=no-self-use
@@ -211,3 +214,29 @@ def test_record_processor_is_garbage_collected(
211214
212215 # Then the reference to the processor should no longer exist
213216 assert weak_ref () is None
217+
218+ def test_logging_lib_not_invoked_in_emit (
219+ self , batch_processor_class , telemetry
220+ ):
221+ exporter = Mock ()
222+ processor = batch_processor_class (exporter )
223+ processor ._batch_processor .emit (telemetry )
224+ logger_provider = LoggerProvider (
225+ resource = Resource .create (
226+ {
227+ "service.name" : "shoppingcart" ,
228+ "service.instance.id" : "instance-12" ,
229+ }
230+ ),
231+ )
232+ set_logger_provider (logger_provider )
233+ logger_provider .add_log_record_processor (processor )
234+ handler = LoggingHandler (
235+ level = logging .INFO , logger_provider = logger_provider
236+ )
237+ # Attach OTLP handler to root logger
238+ logging .getLogger ().addHandler (handler )
239+ # If `emit` calls logging.log then this test will throw a maximum recursion depth exceeded exception and fail.
240+ processor .emit (telemetry )
241+ processor .shutdown ()
242+ processor .emit (telemetry )
0 commit comments