From 1273491700df46436e1fe1ade62d6071e4d353b7 Mon Sep 17 00:00:00 2001 From: houseme Date: Mon, 24 Mar 2025 18:49:37 +0800 Subject: [PATCH] feat: upgrade tracing-opentelemetry to 0.30 - Update tracing-opentelemetry dependency to version 0.30 --- Cargo.toml | 2 +- opentelemetry-appender-tracing/CHANGELOG.md | 7 ++ opentelemetry-appender-tracing/Cargo.toml | 7 +- opentelemetry-appender-tracing/src/layer.rs | 132 ++++++++++---------- 4 files changed, 77 insertions(+), 71 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 510ab8d634..831961a85d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -75,7 +75,7 @@ sysinfo = "0.32" tempfile = "3.3.0" testcontainers = "0.23.1" tracing-log = "0.2" -tracing-opentelemetry = "0.29" +tracing-opentelemetry = "0.30" typed-builder = "0.20" uuid = "1.3" diff --git a/opentelemetry-appender-tracing/CHANGELOG.md b/opentelemetry-appender-tracing/CHANGELOG.md index b4e341383e..49c52cc082 100644 --- a/opentelemetry-appender-tracing/CHANGELOG.md +++ b/opentelemetry-appender-tracing/CHANGELOG.md @@ -2,6 +2,13 @@ ## vNext +## 0.29.1 + +Released 2025-Mar-24 + +- Bump `tracing-opentelemetry` to 0.30 + + ## 0.29.0 Released 2025-Mar-21 diff --git a/opentelemetry-appender-tracing/Cargo.toml b/opentelemetry-appender-tracing/Cargo.toml index c2c22d6fba..1372cda3b6 100644 --- a/opentelemetry-appender-tracing/Cargo.toml +++ b/opentelemetry-appender-tracing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "opentelemetry-appender-tracing" -version = "0.29.0" +version = "0.29.1" edition = "2021" description = "An OpenTelemetry log appender for the tracing crate" homepage = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-appender-tracing" @@ -17,7 +17,7 @@ tracing = { workspace = true, features = ["std"]} tracing-core = { workspace = true } tracing-log = { workspace = true, optional = true } tracing-subscriber = { workspace = true, features = ["registry", "std"] } -# tracing-opentelemetry = { workspace = true, optional = true } +tracing-opentelemetry = { workspace = true, optional = true } [dev-dependencies] log = { workspace = true } @@ -36,8 +36,7 @@ pprof = { version = "0.14", features = ["flamegraph", "criterion"] } default = [] experimental_metadata_attributes = ["dep:tracing-log"] spec_unstable_logs_enabled = ["opentelemetry/spec_unstable_logs_enabled"] -# TODO - Enable this in 0.29.1 (once tracing-opentelemetry v0.30 is released) -# experimental_use_tracing_span_context = ["tracing-opentelemetry"] +experimental_use_tracing_span_context = ["tracing-opentelemetry"] [[bench]] diff --git a/opentelemetry-appender-tracing/src/layer.rs b/opentelemetry-appender-tracing/src/layer.rs index bd3e5aaea7..fe0bc645ed 100644 --- a/opentelemetry-appender-tracing/src/layer.rs +++ b/opentelemetry-appender-tracing/src/layer.rs @@ -244,25 +244,25 @@ where // Visit fields. event.record(&mut visitor); - // #[cfg(feature = "experimental_use_tracing_span_context")] - // if let Some(span) = _ctx.event_span(event) { - // use tracing_opentelemetry::OtelData; - // let opt_span_id = span - // .extensions() - // .get::() - // .and_then(|otd| otd.builder.span_id); - - // let opt_trace_id = span.scope().last().and_then(|root_span| { - // root_span - // .extensions() - // .get::() - // .and_then(|otd| otd.builder.trace_id) - // }); - - // if let Some((trace_id, span_id)) = opt_trace_id.zip(opt_span_id) { - // log_record.set_trace_context(trace_id, span_id, None); - // } - // } + #[cfg(feature = "experimental_use_tracing_span_context")] + if let Some(span) = _ctx.event_span(event) { + use tracing_opentelemetry::OtelData; + let opt_span_id = span + .extensions() + .get::() + .and_then(|otd| otd.builder.span_id); + + let opt_trace_id = span.scope().last().and_then(|root_span| { + root_span + .extensions() + .get::() + .and_then(|otd| otd.builder.trace_id) + }); + + if let Some((trace_id, span_id)) = opt_trace_id.zip(opt_span_id) { + log_record.set_trace_context(trace_id, span_id, None); + } + } //emit record self.logger.emit(log_record); @@ -673,66 +673,66 @@ mod tests { } } - // #[cfg(feature = "experimental_use_tracing_span_context")] - // #[test] - // fn tracing_appender_inside_tracing_crate_context() { - // use opentelemetry_sdk::trace::InMemorySpanExporterBuilder; + #[cfg(feature = "experimental_use_tracing_span_context")] + #[test] + fn tracing_appender_inside_tracing_crate_context() { + use opentelemetry_sdk::trace::InMemorySpanExporterBuilder; - // // Arrange - // let exporter: InMemoryLogExporter = InMemoryLogExporter::default(); - // let logger_provider = SdkLoggerProvider::builder() - // .with_simple_exporter(exporter.clone()) - // .build(); + // Arrange + let exporter: InMemoryLogExporter = InMemoryLogExporter::default(); + let logger_provider = SdkLoggerProvider::builder() + .with_simple_exporter(exporter.clone()) + .build(); - // // setup tracing layer to compare trace/span IDs against - // let span_exporter = InMemorySpanExporterBuilder::new().build(); - // let tracer_provider = SdkTracerProvider::builder() - // .with_simple_exporter(span_exporter.clone()) - // .build(); - // let tracer = tracer_provider.tracer("test-tracer"); + // setup tracing layer to compare trace/span IDs against + let span_exporter = InMemorySpanExporterBuilder::new().build(); + let tracer_provider = SdkTracerProvider::builder() + .with_simple_exporter(span_exporter.clone()) + .build(); + let tracer = tracer_provider.tracer("test-tracer"); - // let level_filter = tracing_subscriber::filter::LevelFilter::ERROR; - // let log_layer = - // layer::OpenTelemetryTracingBridge::new(&logger_provider).with_filter(level_filter); + let level_filter = tracing_subscriber::filter::LevelFilter::ERROR; + let log_layer = + layer::OpenTelemetryTracingBridge::new(&logger_provider).with_filter(level_filter); - // let subscriber = tracing_subscriber::registry() - // .with(log_layer) - // .with(tracing_opentelemetry::layer().with_tracer(tracer)); + let subscriber = tracing_subscriber::registry() + .with(log_layer) + .with(tracing_opentelemetry::layer().with_tracer(tracer)); - // // Avoiding global subscriber.init() as that does not play well with unit tests. - // let _guard = tracing::subscriber::set_default(subscriber); + // Avoiding global subscriber.init() as that does not play well with unit tests. + let _guard = tracing::subscriber::set_default(subscriber); - // // Act - // tracing::error_span!("outer-span").in_scope(|| { - // error!("first-event"); + // Act + tracing::error_span!("outer-span").in_scope(|| { + error!("first-event"); - // tracing::error_span!("inner-span").in_scope(|| { - // error!("second-event"); - // }); - // }); + tracing::error_span!("inner-span").in_scope(|| { + error!("second-event"); + }); + }); - // assert!(logger_provider.force_flush().is_ok()); + assert!(logger_provider.force_flush().is_ok()); - // let logs = exporter.get_emitted_logs().expect("No emitted logs"); - // assert_eq!(logs.len(), 2, "Expected 2 logs, got: {logs:?}"); + let logs = exporter.get_emitted_logs().expect("No emitted logs"); + assert_eq!(logs.len(), 2, "Expected 2 logs, got: {logs:?}"); - // let spans = span_exporter.get_finished_spans().unwrap(); - // assert_eq!(spans.len(), 2); + let spans = span_exporter.get_finished_spans().unwrap(); + assert_eq!(spans.len(), 2); - // let trace_id = spans[0].span_context.trace_id(); - // assert_eq!(trace_id, spans[1].span_context.trace_id()); - // let inner_span_id = spans[0].span_context.span_id(); - // let outer_span_id = spans[1].span_context.span_id(); - // assert_eq!(outer_span_id, spans[0].parent_span_id); + let trace_id = spans[0].span_context.trace_id(); + assert_eq!(trace_id, spans[1].span_context.trace_id()); + let inner_span_id = spans[0].span_context.span_id(); + let outer_span_id = spans[1].span_context.span_id(); + assert_eq!(outer_span_id, spans[0].parent_span_id); - // let trace_ctx0 = logs[0].record.trace_context().unwrap(); - // let trace_ctx1 = logs[1].record.trace_context().unwrap(); + let trace_ctx0 = logs[0].record.trace_context().unwrap(); + let trace_ctx1 = logs[1].record.trace_context().unwrap(); - // assert_eq!(trace_ctx0.trace_id, trace_id); - // assert_eq!(trace_ctx1.trace_id, trace_id); - // assert_eq!(trace_ctx0.span_id, outer_span_id); - // assert_eq!(trace_ctx1.span_id, inner_span_id); - // } + assert_eq!(trace_ctx0.trace_id, trace_id); + assert_eq!(trace_ctx1.trace_id, trace_id); + assert_eq!(trace_ctx0.span_id, outer_span_id); + assert_eq!(trace_ctx1.span_id, inner_span_id); + } #[test] fn tracing_appender_standalone_with_tracing_log() {