2828from opentelemetry .propagators .composite import CompositePropagator
2929from opentelemetry .sdk ._logs import LogRecordProcessor
3030from opentelemetry .sdk ._logs ._internal import SynchronousMultiLogRecordProcessor
31- from opentelemetry .sdk ._logs .export import BatchLogRecordProcessor , SimpleLogRecordProcessor
31+ from opentelemetry .sdk ._logs .export import BatchLogRecordProcessor , LogExporter , SimpleLogRecordProcessor
3232from opentelemetry .sdk .metrics .export import InMemoryMetricReader , PeriodicExportingMetricReader
3333from opentelemetry .sdk .trace import ReadableSpan , SpanProcessor , SynchronousMultiSpanProcessor
3434from opentelemetry .sdk .trace .export import (
@@ -572,6 +572,24 @@ def test_logfire_config_console_options() -> None:
572572 assert LogfireConfig ().console == ConsoleOptions (verbose = False )
573573
574574
575+ def get_batch_span_exporter (processor : SpanProcessor ) -> SpanExporter :
576+ assert isinstance (processor , BatchSpanProcessor )
577+ try :
578+ exporter = processor ._batch_processor ._exporter # type: ignore
579+ except AttributeError :
580+ exporter = processor .span_exporter # type: ignore
581+ return exporter # type: ignore
582+
583+
584+ def get_batch_log_exporter (processor : LogRecordProcessor ) -> LogExporter :
585+ assert isinstance (processor , BatchLogRecordProcessor )
586+ try :
587+ exporter = processor ._batch_processor ._exporter # type: ignore
588+ except AttributeError :
589+ exporter = processor ._exporter # type: ignore
590+ return exporter # type: ignore
591+
592+
575593def test_configure_export_delay () -> None :
576594 class TrackingExporter (SpanExporter ):
577595 def __init__ (self ) -> None :
@@ -602,8 +620,8 @@ def configure_tracking_exporter():
602620
603621 dynamic_batch_span_processor , * _ = get_span_processors ()
604622 assert isinstance (dynamic_batch_span_processor , DynamicBatchSpanProcessor )
605- ex = dynamic_batch_span_processor .batch_processor . _exporter = TrackingExporter () # type: ignore
606- assert dynamic_batch_span_processor .span_exporter is ex
623+ batch_processor = dynamic_batch_span_processor .batch_processor
624+ ex = batch_processor .span_exporter = batch_processor . _exporter = TrackingExporter () # type: ignore
607625 return ex
608626
609627 def check_delays (exp : TrackingExporter , min_delay : float , max_delay : float ) -> None :
@@ -612,7 +630,6 @@ def check_delays(exp: TrackingExporter, min_delay: float, max_delay: float) -> N
612630
613631 # test the default behaviour
614632 exporter = configure_tracking_exporter ()
615- assert get_span_processors ()[0 ].batch_processor ._schedule_delay == 0.1 # type: ignore
616633 for _ in range (10 ):
617634 logfire .info ('test' )
618635 sleep (0.1 )
@@ -625,7 +642,6 @@ def check_delays(exp: TrackingExporter, min_delay: float, max_delay: float) -> N
625642 pass
626643 sleep (0.1 )
627644 # After the first 10 spans, we increase to 500ms by default
628- assert get_span_processors ()[0 ].batch_processor ._schedule_delay == 0.5 # type: ignore
629645 check_delays (exporter , 0.4 , 1.0 )
630646
631647 # test a very small value
@@ -1566,9 +1582,9 @@ def test_default_exporters(monkeypatch: pytest.MonkeyPatch):
15661582 assert isinstance (console_log_processor ._exporter , ConsoleLogExporter ) # type: ignore
15671583 assert console_log_processor ._exporter .span_exporter is console_span_processor .span_exporter # type: ignore
15681584
1569- assert isinstance (logfire_log_processor , BatchLogRecordProcessor )
1570- assert isinstance (logfire_log_processor . _batch_processor . _exporter , QuietLogExporter ) # type: ignore
1571- assert isinstance (logfire_log_processor . _batch_processor . _exporter . exporter , OTLPLogExporter ) # type: ignore
1585+ exporter = get_batch_log_exporter (logfire_log_processor )
1586+ assert isinstance (exporter , QuietLogExporter )
1587+ assert isinstance (exporter . exporter , OTLPLogExporter )
15721588
15731589
15741590def test_custom_exporters ():
@@ -1600,8 +1616,7 @@ def test_otel_exporter_otlp_endpoint_env_var():
16001616 logfire .configure (send_to_logfire = False , console = False )
16011617
16021618 [otel_processor ] = get_span_processors ()
1603- assert isinstance (otel_processor , BatchSpanProcessor )
1604- exporter = otel_processor ._batch_processor ._exporter # type: ignore
1619+ exporter = get_batch_span_exporter (otel_processor )
16051620 assert isinstance (exporter , OTLPSpanExporter )
16061621 assert exporter ._endpoint == 'otel_endpoint/v1/traces' # type: ignore
16071622
@@ -1611,9 +1626,9 @@ def test_otel_exporter_otlp_endpoint_env_var():
16111626 assert otel_metric_reader ._exporter ._endpoint == 'otel_endpoint/v1/metrics' # type: ignore
16121627
16131628 [otel_log_processor ] = get_log_record_processors ()
1614- assert isinstance (otel_log_processor , BatchLogRecordProcessor )
1615- assert isinstance (otel_log_processor . _batch_processor . _exporter , OTLPLogExporter ) # type: ignore
1616- assert otel_log_processor . _batch_processor . _exporter ._endpoint == 'otel_endpoint/v1/logs' # type: ignore
1629+ log_exporter = get_batch_log_exporter (otel_log_processor )
1630+ assert isinstance (log_exporter , OTLPLogExporter )
1631+ assert log_exporter ._endpoint == 'otel_endpoint/v1/logs' # type: ignore
16171632
16181633
16191634def test_otel_traces_exporter_env_var ():
@@ -1644,8 +1659,7 @@ def test_otel_metrics_exporter_env_var():
16441659 logfire .configure (send_to_logfire = False , console = False )
16451660
16461661 [otel_processor ] = get_span_processors ()
1647- assert isinstance (otel_processor , BatchSpanProcessor )
1648- exporter = otel_processor ._batch_processor ._exporter # type: ignore
1662+ exporter = get_batch_span_exporter (otel_processor )
16491663 assert isinstance (exporter , OTLPSpanExporter )
16501664 assert exporter ._endpoint == 'otel_endpoint3/v1/traces' # type: ignore
16511665
@@ -1658,8 +1672,7 @@ def test_otel_logs_exporter_env_var():
16581672 logfire .configure (send_to_logfire = False , console = False )
16591673
16601674 [otel_processor ] = get_span_processors ()
1661- assert isinstance (otel_processor , BatchSpanProcessor )
1662- exporter = otel_processor ._batch_processor ._exporter # type: ignore
1675+ exporter = get_batch_span_exporter (otel_processor )
16631676 assert isinstance (exporter , OTLPSpanExporter )
16641677 assert exporter ._endpoint == 'otel_endpoint4/v1/traces' # type: ignore
16651678
@@ -1672,8 +1685,7 @@ def test_otel_exporter_otlp_traces_endpoint_env_var():
16721685 logfire .configure (send_to_logfire = False , console = False )
16731686
16741687 [otel_processor ] = get_span_processors ()
1675- assert isinstance (otel_processor , BatchSpanProcessor )
1676- exporter = otel_processor ._batch_processor ._exporter # type: ignore
1688+ exporter = get_batch_span_exporter (otel_processor )
16771689 assert isinstance (exporter , OTLPSpanExporter )
16781690 assert exporter ._endpoint == 'otel_traces_endpoint' # type: ignore
16791691
@@ -1704,9 +1716,9 @@ def test_otel_exporter_otlp_logs_endpoint_env_var():
17041716 assert len (list (get_metric_readers ())) == 0
17051717
17061718 [otel_log_processor ] = get_log_record_processors ()
1707- assert isinstance (otel_log_processor , BatchLogRecordProcessor )
1708- assert isinstance (otel_log_processor . _batch_processor . _exporter , OTLPLogExporter ) # type: ignore
1709- assert otel_log_processor . _batch_processor . _exporter ._endpoint == 'otel_logs_endpoint' # type: ignore
1719+ exporter = get_batch_log_exporter (otel_log_processor )
1720+ assert isinstance (exporter , OTLPLogExporter )
1721+ assert exporter ._endpoint == 'otel_logs_endpoint' # type: ignore
17101722
17111723
17121724def test_metrics_false (monkeypatch : pytest .MonkeyPatch ):
0 commit comments