Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add test to validate log shutdown #1620

Merged
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions opentelemetry-sdk/src/logs/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ pub use log_processor::{
mod tests {
use super::*;
use crate::testing::logs::InMemoryLogsExporter;
use opentelemetry::global::{logger, set_logger_provider, shutdown_logger_provider};
use opentelemetry::logs::{LogRecord, Logger, LoggerProvider as _, Severity};
use opentelemetry::{logs::AnyValue, Key};

Expand Down Expand Up @@ -57,4 +58,51 @@ mod tests {
.expect("Attributes are expected");
assert_eq!(attributes.len(), 2);
}

#[test]
fn logging_sdk_shutdown_test() {
// Arrange
let exporter: InMemoryLogsExporter = InMemoryLogsExporter::default();
let logger_provider = LoggerProvider::builder()
.with_log_processor(SimpleLogProcessor::new(Box::new(exporter.clone())))
.build();
set_logger_provider(logger_provider);

// Act
let logger = logger("test-logger");
let mut log_record: LogRecord = LogRecord::default();
log_record.severity_number = Some(Severity::Error);
log_record.severity_text = Some("Error".into());
let attributes = vec![
(Key::new("key1"), "value1".into()),
(Key::new("key2"), "value2".into()),
];
log_record.attributes = Some(attributes);
logger.emit(log_record);

// Intentionally *not* calling shutdown/flush
// on the provider, but instead relying on
// shutdown_logger_provider which causes
// the global provider to be dropped, and
// the sdk logger provider's drop implementation
// will cause shutdown to be called on processors/exporters.
shutdown_logger_provider();

// Assert
let exported_logs = exporter
.get_emitted_logs()
.expect("Logs are expected to be exported.");
assert_eq!(exported_logs.len(), 1);
let log = exported_logs
.first()
.expect("Atleast one log is expected to be present.");
assert_eq!(log.instrumentation.name, "test-logger");
assert_eq!(log.record.severity_number, Some(Severity::Error));
let attributes: Vec<(Key, AnyValue)> = log
.record
.attributes
.clone()
.expect("Attributes are expected");
assert_eq!(attributes.len(), 2);
}
}
Loading