@@ -38,19 +38,33 @@ fn init_logs() -> Result<sdklogs::LoggerProvider> {
38
38
mod logtests {
39
39
use super :: * ;
40
40
use integration_test_runner:: logs_asserter:: { read_logs_from_json, LogsAsserter } ;
41
+ use opentelemetry_appender_tracing:: layer:: OpenTelemetryTracingBridge ;
41
42
use std:: { fs:: File , time:: Duration } ;
43
+ use tracing:: info;
44
+ use tracing_subscriber:: layer:: SubscriberExt ;
45
+
42
46
#[ test]
43
47
#[ should_panic( expected = "assertion `left == right` failed: body does not match" ) ]
44
48
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" ) ;
47
59
LogsAsserter :: new ( right, left) . assert ( ) ;
48
60
}
49
61
50
62
#[ 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" ) ? ) ? ;
53
65
LogsAsserter :: new ( logs. clone ( ) , logs) . assert ( ) ;
66
+
67
+ Ok ( ( ) )
54
68
}
55
69
56
70
#[ tokio:: test( flavor = "multi_thread" , worker_threads = 4 ) ]
@@ -84,15 +98,44 @@ mod logtests {
84
98
85
99
Ok ( ( ) )
86
100
}
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
+ }
87
129
}
88
130
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) ? ) ? ;
92
134
93
135
LogsAsserter :: new ( left, right) . assert ( ) ;
94
136
95
- assert ! ( File :: open( result) . unwrap( ) . metadata( ) . unwrap( ) . size( ) > 0 )
137
+ assert ! ( File :: open( result) . unwrap( ) . metadata( ) . unwrap( ) . size( ) > 0 ) ;
138
+ Ok ( ( ) )
96
139
}
97
140
98
141
///
0 commit comments