@@ -69,3 +69,104 @@ const fn severity_of_level(level: Level) -> Severity {
69
69
Level :: Trace => Severity :: Trace ,
70
70
}
71
71
}
72
+
73
+ #[ cfg( all( test, feature = "testing" , feature = "logs" ) ) ]
74
+ mod tests {
75
+ use super :: OpenTelemetryLogBridge ;
76
+
77
+ use opentelemetry_sdk:: { logs:: LoggerProvider , testing:: logs:: InMemoryLogsExporter } ;
78
+
79
+ use log:: { Level , Log } ;
80
+
81
+ #[ test]
82
+ fn logbridge_with_default_metadata_is_enabled ( ) {
83
+ let exporter = InMemoryLogsExporter :: default ( ) ;
84
+
85
+ let logger_provider = LoggerProvider :: builder ( )
86
+ . with_simple_exporter ( exporter)
87
+ . build ( ) ;
88
+
89
+ let otel_log_appender = OpenTelemetryLogBridge :: new ( & logger_provider) ;
90
+
91
+ // As a result of using `with_simple_exporter` while building the logger provider,
92
+ // the processor used is a `SimpleLogProcessor` which has an implementation of `event_enabled`
93
+ // that always returns true.
94
+ #[ cfg( feature = "logs_level_enabled" ) ]
95
+ assert_eq ! (
96
+ otel_log_appender. enabled( & log:: Metadata :: builder( ) . build( ) ) ,
97
+ true
98
+ ) ;
99
+ #[ cfg( not( feature = "logs_level_enabled" ) ) ]
100
+ assert_eq ! (
101
+ otel_log_appender. enabled( & log:: Metadata :: builder( ) . build( ) ) ,
102
+ true
103
+ ) ;
104
+ }
105
+
106
+ #[ test]
107
+ fn logbridge_with_record_can_log ( ) {
108
+ let exporter = InMemoryLogsExporter :: default ( ) ;
109
+
110
+ let logger_provider = LoggerProvider :: builder ( )
111
+ . with_simple_exporter ( exporter. clone ( ) )
112
+ . build ( ) ;
113
+
114
+ let otel_log_appender = OpenTelemetryLogBridge :: new ( & logger_provider) ;
115
+
116
+ log:: set_boxed_logger ( Box :: new ( otel_log_appender) ) . unwrap ( ) ;
117
+ log:: set_max_level ( Level :: Trace . to_level_filter ( ) ) ;
118
+
119
+ log:: trace!( "TRACE" ) ;
120
+ log:: debug!( "DEBUG" ) ;
121
+ log:: info!( "INFO" ) ;
122
+ log:: warn!( "WARN" ) ;
123
+ log:: error!( "ERROR" ) ;
124
+
125
+ let logs = exporter. get_emitted_logs ( ) . unwrap ( ) ;
126
+
127
+ assert_eq ! ( logs. len( ) , 5 ) ;
128
+ for log in logs {
129
+ let body: String = match log. record . body . as_ref ( ) . unwrap ( ) {
130
+ super :: AnyValue :: String ( s) => s. to_string ( ) ,
131
+ _ => panic ! ( "AnyValue::String expected" ) ,
132
+ } ;
133
+ assert_eq ! ( body, log. record. severity_text. unwrap( ) ) ;
134
+ }
135
+ }
136
+
137
+ #[ test]
138
+ fn test_flush ( ) {
139
+ let exporter = InMemoryLogsExporter :: default ( ) ;
140
+
141
+ let logger_provider = LoggerProvider :: builder ( )
142
+ . with_simple_exporter ( exporter)
143
+ . build ( ) ;
144
+
145
+ let otel_log_appender = OpenTelemetryLogBridge :: new ( & logger_provider) ;
146
+ otel_log_appender. flush ( ) ;
147
+ }
148
+
149
+ #[ test]
150
+ fn check_level_severities ( ) {
151
+ assert_eq ! (
152
+ super :: severity_of_level( log:: Level :: Error ) ,
153
+ opentelemetry:: logs:: Severity :: Error
154
+ ) ;
155
+ assert_eq ! (
156
+ super :: severity_of_level( log:: Level :: Warn ) ,
157
+ opentelemetry:: logs:: Severity :: Warn
158
+ ) ;
159
+ assert_eq ! (
160
+ super :: severity_of_level( log:: Level :: Info ) ,
161
+ opentelemetry:: logs:: Severity :: Info
162
+ ) ;
163
+ assert_eq ! (
164
+ super :: severity_of_level( log:: Level :: Debug ) ,
165
+ opentelemetry:: logs:: Severity :: Debug
166
+ ) ;
167
+ assert_eq ! (
168
+ super :: severity_of_level( log:: Level :: Trace ) ,
169
+ opentelemetry:: logs:: Severity :: Trace
170
+ ) ;
171
+ }
172
+ }
0 commit comments