@@ -38,19 +38,33 @@ fn init_logs() -> Result<sdklogs::LoggerProvider> {
3838mod logtests {
3939 use super :: * ;
4040 use integration_test_runner:: logs_asserter:: { read_logs_from_json, LogsAsserter } ;
41+ use opentelemetry_appender_tracing:: layer:: OpenTelemetryTracingBridge ;
4142 use std:: { fs:: File , time:: Duration } ;
43+ use tracing:: info;
44+ use tracing_subscriber:: layer:: SubscriberExt ;
45+
4246 #[ test]
4347 #[ should_panic( expected = "assertion `left == right` failed: body does not match" ) ]
4448 pub fn test_assert_logs_eq_failure ( ) {
45- let left = read_logs_from_json ( File :: open ( "./expected/logs.json" ) . unwrap ( ) ) ;
46- let right = read_logs_from_json ( File :: open ( "./expected/failed_logs.json" ) . unwrap ( ) ) ;
49+ let left = read_logs_from_json (
50+ File :: open ( "./expected/logs.json" ) . expect ( "failed to open expected file" ) ,
51+ )
52+ . expect ( "Failed to read logs from expected file" ) ;
53+
54+ let right = read_logs_from_json (
55+ File :: open ( "./expected/failed_logs.json" )
56+ . expect ( "failed to open expected failed log file" ) ,
57+ )
58+ . expect ( "Failed to read logs from expected failed log file" ) ;
4759 LogsAsserter :: new ( right, left) . assert ( ) ;
4860 }
4961
5062 #[ test]
51- pub fn test_assert_logs_eq ( ) {
52- let logs = read_logs_from_json ( File :: open ( "./expected/logs.json" ) . unwrap ( ) ) ;
63+ pub fn test_assert_logs_eq ( ) -> Result < ( ) > {
64+ let logs = read_logs_from_json ( File :: open ( "./expected/logs.json" ) ? ) ? ;
5365 LogsAsserter :: new ( logs. clone ( ) , logs) . assert ( ) ;
66+
67+ Ok ( ( ) )
5468 }
5569
5670 #[ tokio:: test( flavor = "multi_thread" , worker_threads = 4 ) ]
@@ -84,15 +98,44 @@ mod logtests {
8498
8599 Ok ( ( ) )
86100 }
101+
102+ #[ test]
103+ #[ cfg( any( feature = "tonic-client" , feature = "reqwest-blocking-client" ) ) ]
104+ pub fn logs_batch_non_tokio_main ( ) -> Result < ( ) > {
105+ // Initialize the logger provider inside a tokio runtime
106+ // as this allows tonic client to capture the runtime,
107+ // but actual export occurs from the dedicated std::thread
108+ // created by BatchLogProcessor.
109+ let rt = tokio:: runtime:: Runtime :: new ( ) ?;
110+ let logger_provider = rt. block_on ( async {
111+ // While we're here setup our collector container too, as this needs tokio to run
112+ test_utils:: start_collector_container ( ) . await ?;
113+ init_logs ( )
114+ } ) ?;
115+
116+ info ! ( "LoggerProvider created" ) ;
117+ let layer = OpenTelemetryTracingBridge :: new ( & logger_provider) ;
118+ let subscriber = tracing_subscriber:: registry ( ) . with ( layer) ;
119+ {
120+ let _guard = tracing:: subscriber:: set_default ( subscriber) ;
121+ info ! ( target: "my-target" , "hello from {}. My price is {}." , "banana" , 2.99 ) ;
122+ }
123+ let _ = logger_provider. shutdown ( ) ;
124+ // tokio::time::sleep(Duration::from_secs(10)).await;
125+ assert_logs_results ( test_utils:: LOGS_FILE , "expected/logs.json" ) ;
126+
127+ Ok ( ( ) )
128+ }
87129}
88130
89- pub fn assert_logs_results ( result : & str , expected : & str ) {
90- let left = read_logs_from_json ( File :: open ( expected) . unwrap ( ) ) ;
91- let right = read_logs_from_json ( File :: open ( result) . unwrap ( ) ) ;
131+ pub fn assert_logs_results ( result : & str , expected : & str ) -> Result < ( ) > {
132+ let left = read_logs_from_json ( File :: open ( expected) ? ) ? ;
133+ let right = read_logs_from_json ( File :: open ( result) ? ) ? ;
92134
93135 LogsAsserter :: new ( left, right) . assert ( ) ;
94136
95- assert ! ( File :: open( result) . unwrap( ) . metadata( ) . unwrap( ) . size( ) > 0 )
137+ assert ! ( File :: open( result) . unwrap( ) . metadata( ) . unwrap( ) . size( ) > 0 ) ;
138+ Ok ( ( ) )
96139}
97140
98141///
0 commit comments