Skip to content

Commit fc02a9f

Browse files
authored
Merge branch 'main' into doc-inmemory-exporters
2 parents e885c6b + 989fa3b commit fc02a9f

File tree

2 files changed

+102
-0
lines changed

2 files changed

+102
-0
lines changed

CONTRIBUTING.md

+1
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ For GitHub groups see the [code owners](CODEOWNERS) file.
194194
- [Dirkjan Ochtman](https://github.com/djc)
195195
- [Jan Kühle](https://github.com/frigus02)
196196
- [Isobel Redelmeier](https://github.com/iredelmeier)
197+
- [Mike Goldsmith](https://github.com/MikeGoldsmith)
197198

198199
### Become an Approver or a Maintainer
199200

opentelemetry-appender-log/src/lib.rs

+101
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,104 @@ const fn severity_of_level(level: Level) -> Severity {
6969
Level::Trace => Severity::Trace,
7070
}
7171
}
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

Comments
 (0)