@@ -9,7 +9,7 @@ use opentelemetry_sdk::{logs as sdklogs, Resource};
99use std:: fs:: File ;
1010use std:: io:: Read ;
1111
12- fn init_logs ( ) -> Result < sdklogs:: LoggerProvider > {
12+ fn init_logs ( is_simple : bool ) -> Result < sdklogs:: LoggerProvider > {
1313 let exporter_builder = LogExporter :: builder ( ) ;
1414 #[ cfg( feature = "tonic-client" ) ]
1515 let exporter_builder = exporter_builder. with_tonic ( ) ;
@@ -23,14 +23,22 @@ fn init_logs() -> Result<sdklogs::LoggerProvider> {
2323
2424 let exporter = exporter_builder. build ( ) ?;
2525
26- Ok ( LoggerProvider :: builder ( )
27- . with_batch_exporter ( exporter)
26+ let mut logger_provider_builder = LoggerProvider :: builder ( ) ;
27+ if is_simple {
28+ logger_provider_builder = logger_provider_builder. with_simple_exporter ( exporter)
29+ } else {
30+ logger_provider_builder = logger_provider_builder. with_batch_exporter ( exporter)
31+ } ;
32+
33+ let logger_provider = logger_provider_builder
2834 . with_resource (
2935 Resource :: builder_empty ( )
3036 . with_service_name ( "logs-integration-test" )
3137 . build ( ) ,
3238 )
33- . build ( ) )
39+ . build ( ) ;
40+
41+ Ok ( logger_provider)
3442}
3543
3644#[ cfg( test) ]
@@ -99,7 +107,7 @@ mod logtests {
99107 use crate :: { assert_logs_results, init_logs} ;
100108 test_utils:: start_collector_container ( ) . await ?;
101109
102- let logger_provider = init_logs ( ) . unwrap ( ) ;
110+ let logger_provider = init_logs ( false ) . unwrap ( ) ;
103111 let layer = OpenTelemetryTracingBridge :: new ( & logger_provider) ;
104112 let subscriber = tracing_subscriber:: registry ( ) . with ( layer) ;
105113 // generate a random uuid and store it to expected guid
@@ -130,7 +138,38 @@ mod logtests {
130138 let logger_provider = rt. block_on ( async {
131139 // While we're here setup our collector container too, as this needs tokio to run
132140 test_utils:: start_collector_container ( ) . await ?;
133- init_logs ( )
141+ init_logs ( false )
142+ } ) ?;
143+ let layer = layer:: OpenTelemetryTracingBridge :: new ( & logger_provider) ;
144+ let subscriber = tracing_subscriber:: registry ( ) . with ( layer) ;
145+ // generate a random uuid and store it to expected guid
146+ let expected_uuid = Uuid :: new_v4 ( ) . to_string ( ) ;
147+ {
148+ let _guard = tracing:: subscriber:: set_default ( subscriber) ;
149+ info ! ( target: "my-target" , uuid = expected_uuid, "hello from {}. My price is {}." , "banana" , 2.99 ) ;
150+ }
151+
152+ let _ = logger_provider. shutdown ( ) ;
153+ std:: thread:: sleep ( Duration :: from_secs ( 5 ) ) ;
154+ assert_logs_results ( test_utils:: LOGS_FILE , expected_uuid. as_str ( ) ) ?;
155+ Ok ( ( ) )
156+ }
157+
158+ #[ test]
159+ #[ cfg( any( feature = "tonic-client" , feature = "reqwest-blocking-client" ) ) ]
160+ pub fn logs_simple_non_tokio_main ( ) -> Result < ( ) > {
161+ logs_simple_non_tokio_helper ( )
162+ }
163+
164+ fn logs_simple_non_tokio_helper ( ) -> Result < ( ) > {
165+ // Initialize the logger provider inside a tokio runtime
166+ // as this allows tonic client to capture the runtime,
167+ // but actual export occurs from the main non-tokio thread.
168+ let rt = tokio:: runtime:: Runtime :: new ( ) ?;
169+ let logger_provider = rt. block_on ( async {
170+ // While we're here setup our collector container too, as this needs tokio to run
171+ test_utils:: start_collector_container ( ) . await ?;
172+ init_logs ( true )
134173 } ) ?;
135174 let layer = layer:: OpenTelemetryTracingBridge :: new ( & logger_provider) ;
136175 let subscriber = tracing_subscriber:: registry ( ) . with ( layer) ;
0 commit comments