Skip to content

Commit 1f0d9a9

Browse files
authored
chore: Prepare for opentelemetry-appender-tracing 0.30.1 - bump tracing-opentelemetry to 0.31 (#3022)
1 parent 51dc2f0 commit 1f0d9a9

File tree

4 files changed

+143
-138
lines changed

4 files changed

+143
-138
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ sysinfo = "0.32"
7474
tempfile = "3.3.0"
7575
testcontainers = "0.23.1"
7676
tracing-log = "0.2"
77-
tracing-opentelemetry = "0.30"
77+
tracing-opentelemetry = "0.31"
7878
typed-builder = "0.20"
7979
uuid = "1.3"
8080

opentelemetry-appender-tracing/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
## vNext
44

5+
## 0.30.1
6+
7+
Released 2025-June-05
8+
9+
- Bump `tracing-opentelemetry` to 0.31
10+
511
## 0.30.0
612

713
Released 2025-May-23

opentelemetry-appender-tracing/Cargo.toml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "opentelemetry-appender-tracing"
3-
version = "0.30.0"
3+
version = "0.30.1"
44
edition = "2021"
55
description = "An OpenTelemetry log appender for the tracing crate"
66
homepage = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-appender-tracing"
@@ -18,7 +18,7 @@ tracing = { workspace = true, features = ["std"]}
1818
tracing-core = { workspace = true }
1919
tracing-log = { workspace = true, optional = true }
2020
tracing-subscriber = { workspace = true, features = ["registry", "std"] }
21-
# tracing-opentelemetry = { workspace = true, optional = true }
21+
tracing-opentelemetry = { workspace = true, optional = true }
2222

2323
[dev-dependencies]
2424
log = { workspace = true }
@@ -37,8 +37,7 @@ pprof = { version = "0.14", features = ["flamegraph", "criterion"] }
3737
default = []
3838
experimental_metadata_attributes = ["dep:tracing-log"]
3939
spec_unstable_logs_enabled = ["opentelemetry/spec_unstable_logs_enabled"]
40-
# TODO: Enable this back in 0.30.1 after tracing-opentelemetry is released
41-
# experimental_use_tracing_span_context = ["tracing-opentelemetry"]
40+
experimental_use_tracing_span_context = ["tracing-opentelemetry"]
4241

4342

4443
[[bench]]

opentelemetry-appender-tracing/src/layer.rs

Lines changed: 133 additions & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -244,28 +244,28 @@ where
244244
// Visit fields.
245245
event.record(&mut visitor);
246246

247-
// #[cfg(feature = "experimental_use_tracing_span_context")]
248-
// if let Some(span) = _ctx.event_span(event) {
249-
// use opentelemetry::trace::TraceContextExt;
250-
// use tracing_opentelemetry::OtelData;
251-
// if let Some(otd) = span.extensions().get::<OtelData>() {
252-
// if let Some(span_id) = otd.builder.span_id {
253-
// let opt_trace_id = if otd.parent_cx.has_active_span() {
254-
// Some(otd.parent_cx.span().span_context().trace_id())
255-
// } else {
256-
// span.scope().last().and_then(|root_span| {
257-
// root_span
258-
// .extensions()
259-
// .get::<OtelData>()
260-
// .and_then(|otd| otd.builder.trace_id)
261-
// })
262-
// };
263-
// if let Some(trace_id) = opt_trace_id {
264-
// log_record.set_trace_context(trace_id, span_id, None);
265-
// }
266-
// }
267-
// }
268-
// }
247+
#[cfg(feature = "experimental_use_tracing_span_context")]
248+
if let Some(span) = _ctx.event_span(event) {
249+
use opentelemetry::trace::TraceContextExt;
250+
use tracing_opentelemetry::OtelData;
251+
if let Some(otd) = span.extensions().get::<OtelData>() {
252+
if let Some(span_id) = otd.builder.span_id {
253+
let opt_trace_id = if otd.parent_cx.has_active_span() {
254+
Some(otd.parent_cx.span().span_context().trace_id())
255+
} else {
256+
span.scope().last().and_then(|root_span| {
257+
root_span
258+
.extensions()
259+
.get::<OtelData>()
260+
.and_then(|otd| otd.builder.trace_id)
261+
})
262+
};
263+
if let Some(trace_id) = opt_trace_id {
264+
log_record.set_trace_context(trace_id, span_id, None);
265+
}
266+
}
267+
}
268+
}
269269

270270
//emit record
271271
self.logger.emit(log_record);
@@ -611,117 +611,117 @@ mod tests {
611611
}
612612
}
613613

614-
// #[cfg(feature = "experimental_use_tracing_span_context")]
615-
// #[test]
616-
// fn tracing_appender_inside_tracing_crate_context() {
617-
// use opentelemetry::{trace::SpanContext, Context, SpanId, TraceId};
618-
// use opentelemetry_sdk::trace::InMemorySpanExporterBuilder;
619-
// use tracing_opentelemetry::OpenTelemetrySpanExt;
620-
621-
// // Arrange
622-
// let exporter: InMemoryLogExporter = InMemoryLogExporter::default();
623-
// let logger_provider = SdkLoggerProvider::builder()
624-
// .with_simple_exporter(exporter.clone())
625-
// .build();
626-
627-
// // setup tracing layer to compare trace/span IDs against
628-
// let span_exporter = InMemorySpanExporterBuilder::new().build();
629-
// let tracer_provider = SdkTracerProvider::builder()
630-
// .with_simple_exporter(span_exporter.clone())
631-
// .build();
632-
// let tracer = tracer_provider.tracer("test-tracer");
633-
634-
// let level_filter = tracing_subscriber::filter::LevelFilter::ERROR;
635-
// let log_layer =
636-
// layer::OpenTelemetryTracingBridge::new(&logger_provider).with_filter(level_filter);
637-
638-
// let subscriber = tracing_subscriber::registry()
639-
// .with(log_layer)
640-
// .with(tracing_opentelemetry::layer().with_tracer(tracer));
641-
642-
// // Avoiding global subscriber.init() as that does not play well with unit tests.
643-
// let _guard = tracing::subscriber::set_default(subscriber);
644-
645-
// // Act
646-
// tracing::error_span!("outer-span").in_scope(|| {
647-
// error!("first-event");
648-
649-
// tracing::error_span!("inner-span").in_scope(|| {
650-
// error!("second-event");
651-
// });
652-
// });
653-
654-
// assert!(logger_provider.force_flush().is_ok());
655-
656-
// let logs = exporter.get_emitted_logs().expect("No emitted logs");
657-
// assert_eq!(logs.len(), 2, "Expected 2 logs, got: {logs:?}");
658-
659-
// let spans = span_exporter.get_finished_spans().unwrap();
660-
// assert_eq!(spans.len(), 2);
661-
662-
// let trace_id = spans[0].span_context.trace_id();
663-
// assert_eq!(trace_id, spans[1].span_context.trace_id());
664-
// let inner_span_id = spans[0].span_context.span_id();
665-
// let outer_span_id = spans[1].span_context.span_id();
666-
// assert_eq!(outer_span_id, spans[0].parent_span_id);
667-
668-
// let trace_ctx0 = logs[0].record.trace_context().unwrap();
669-
// let trace_ctx1 = logs[1].record.trace_context().unwrap();
670-
671-
// assert_eq!(trace_ctx0.trace_id, trace_id);
672-
// assert_eq!(trace_ctx1.trace_id, trace_id);
673-
// assert_eq!(trace_ctx0.span_id, outer_span_id);
674-
// assert_eq!(trace_ctx1.span_id, inner_span_id);
675-
676-
// // Set context from remote.
677-
// let remote_trace_id = TraceId::from_u128(233);
678-
// let remote_span_id = SpanId::from_u64(2333);
679-
// let remote_span_context = SpanContext::new(
680-
// remote_trace_id,
681-
// remote_span_id,
682-
// TraceFlags::SAMPLED,
683-
// true,
684-
// Default::default(),
685-
// );
686-
687-
// // Act again.
688-
// tracing::error_span!("outer-span").in_scope(|| {
689-
// let span = tracing::Span::current();
690-
// let parent_context = Context::current().with_remote_span_context(remote_span_context);
691-
// span.set_parent(parent_context);
692-
693-
// error!("first-event");
694-
695-
// tracing::error_span!("inner-span").in_scope(|| {
696-
// error!("second-event");
697-
// });
698-
// });
699-
700-
// assert!(logger_provider.force_flush().is_ok());
701-
702-
// let logs = exporter.get_emitted_logs().expect("No emitted logs");
703-
// assert_eq!(logs.len(), 4, "Expected 4 logs, got: {logs:?}");
704-
// let logs = &logs[2..];
705-
706-
// let spans = span_exporter.get_finished_spans().unwrap();
707-
// assert_eq!(spans.len(), 4);
708-
// let spans = &spans[2..];
709-
710-
// let trace_id = spans[0].span_context.trace_id();
711-
// assert_eq!(trace_id, remote_trace_id);
712-
// assert_eq!(trace_id, spans[1].span_context.trace_id());
713-
// let inner_span_id = spans[0].span_context.span_id();
714-
// let outer_span_id = spans[1].span_context.span_id();
715-
// assert_eq!(outer_span_id, spans[0].parent_span_id);
716-
717-
// let trace_ctx0 = logs[0].record.trace_context().unwrap();
718-
// let trace_ctx1 = logs[1].record.trace_context().unwrap();
719-
720-
// assert_eq!(trace_ctx0.trace_id, trace_id);
721-
// assert_eq!(trace_ctx1.trace_id, trace_id);
722-
// assert_eq!(trace_ctx0.span_id, outer_span_id);
723-
// assert_eq!(trace_ctx1.span_id, inner_span_id);
724-
// }
614+
#[cfg(feature = "experimental_use_tracing_span_context")]
615+
#[test]
616+
fn tracing_appender_inside_tracing_crate_context() {
617+
use opentelemetry::{trace::SpanContext, Context, SpanId, TraceId};
618+
use opentelemetry_sdk::trace::InMemorySpanExporterBuilder;
619+
use tracing_opentelemetry::OpenTelemetrySpanExt;
620+
621+
// Arrange
622+
let exporter: InMemoryLogExporter = InMemoryLogExporter::default();
623+
let logger_provider = SdkLoggerProvider::builder()
624+
.with_simple_exporter(exporter.clone())
625+
.build();
626+
627+
// setup tracing layer to compare trace/span IDs against
628+
let span_exporter = InMemorySpanExporterBuilder::new().build();
629+
let tracer_provider = SdkTracerProvider::builder()
630+
.with_simple_exporter(span_exporter.clone())
631+
.build();
632+
let tracer = tracer_provider.tracer("test-tracer");
633+
634+
let level_filter = tracing_subscriber::filter::LevelFilter::ERROR;
635+
let log_layer =
636+
layer::OpenTelemetryTracingBridge::new(&logger_provider).with_filter(level_filter);
637+
638+
let subscriber = tracing_subscriber::registry()
639+
.with(log_layer)
640+
.with(tracing_opentelemetry::layer().with_tracer(tracer));
641+
642+
// Avoiding global subscriber.init() as that does not play well with unit tests.
643+
let _guard = tracing::subscriber::set_default(subscriber);
644+
645+
// Act
646+
tracing::error_span!("outer-span").in_scope(|| {
647+
error!("first-event");
648+
649+
tracing::error_span!("inner-span").in_scope(|| {
650+
error!("second-event");
651+
});
652+
});
653+
654+
assert!(logger_provider.force_flush().is_ok());
655+
656+
let logs = exporter.get_emitted_logs().expect("No emitted logs");
657+
assert_eq!(logs.len(), 2, "Expected 2 logs, got: {logs:?}");
658+
659+
let spans = span_exporter.get_finished_spans().unwrap();
660+
assert_eq!(spans.len(), 2);
661+
662+
let trace_id = spans[0].span_context.trace_id();
663+
assert_eq!(trace_id, spans[1].span_context.trace_id());
664+
let inner_span_id = spans[0].span_context.span_id();
665+
let outer_span_id = spans[1].span_context.span_id();
666+
assert_eq!(outer_span_id, spans[0].parent_span_id);
667+
668+
let trace_ctx0 = logs[0].record.trace_context().unwrap();
669+
let trace_ctx1 = logs[1].record.trace_context().unwrap();
670+
671+
assert_eq!(trace_ctx0.trace_id, trace_id);
672+
assert_eq!(trace_ctx1.trace_id, trace_id);
673+
assert_eq!(trace_ctx0.span_id, outer_span_id);
674+
assert_eq!(trace_ctx1.span_id, inner_span_id);
675+
676+
// Set context from remote.
677+
let remote_trace_id = TraceId::from_u128(233);
678+
let remote_span_id = SpanId::from_u64(2333);
679+
let remote_span_context = SpanContext::new(
680+
remote_trace_id,
681+
remote_span_id,
682+
TraceFlags::SAMPLED,
683+
true,
684+
Default::default(),
685+
);
686+
687+
// Act again.
688+
tracing::error_span!("outer-span").in_scope(|| {
689+
let span = tracing::Span::current();
690+
let parent_context = Context::current().with_remote_span_context(remote_span_context);
691+
span.set_parent(parent_context);
692+
693+
error!("first-event");
694+
695+
tracing::error_span!("inner-span").in_scope(|| {
696+
error!("second-event");
697+
});
698+
});
699+
700+
assert!(logger_provider.force_flush().is_ok());
701+
702+
let logs = exporter.get_emitted_logs().expect("No emitted logs");
703+
assert_eq!(logs.len(), 4, "Expected 4 logs, got: {logs:?}");
704+
let logs = &logs[2..];
705+
706+
let spans = span_exporter.get_finished_spans().unwrap();
707+
assert_eq!(spans.len(), 4);
708+
let spans = &spans[2..];
709+
710+
let trace_id = spans[0].span_context.trace_id();
711+
assert_eq!(trace_id, remote_trace_id);
712+
assert_eq!(trace_id, spans[1].span_context.trace_id());
713+
let inner_span_id = spans[0].span_context.span_id();
714+
let outer_span_id = spans[1].span_context.span_id();
715+
assert_eq!(outer_span_id, spans[0].parent_span_id);
716+
717+
let trace_ctx0 = logs[0].record.trace_context().unwrap();
718+
let trace_ctx1 = logs[1].record.trace_context().unwrap();
719+
720+
assert_eq!(trace_ctx0.trace_id, trace_id);
721+
assert_eq!(trace_ctx1.trace_id, trace_id);
722+
assert_eq!(trace_ctx0.span_id, outer_span_id);
723+
assert_eq!(trace_ctx1.span_id, inner_span_id);
724+
}
725725

726726
#[test]
727727
fn tracing_appender_standalone_with_tracing_log() {

0 commit comments

Comments
 (0)