Skip to content

Commit 1c33438

Browse files
committed
use the tracing event name as the otel event name
1 parent 293d206 commit 1c33438

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

src/layer.rs

+49
Original file line numberDiff line numberDiff line change
@@ -1052,6 +1052,7 @@ where
10521052
let target = KeyValue::new(target, Value::String(meta.target().into()));
10531053

10541054
let mut otel_event = otel::Event::new(
1055+
// event.metadata().name(),
10551056
String::new(),
10561057
crate::time::now(),
10571058
vec![
@@ -1071,6 +1072,15 @@ where
10711072
sem_conv_config: self.sem_conv_config,
10721073
});
10731074

1075+
// If the event name is still empty, then there was no special handling of error fields.
1076+
// It should be safe to set the event name to the name provided by tracing.
1077+
// This is a hack but there are existing hacks that depend on the name being empty, so to avoid breaking those the event name is set here.
1078+
// Ideally, the name should be set above when the event is constructed.
1079+
// see: https://github.com/tokio-rs/tracing-opentelemetry/pull/28
1080+
if otel_event.name.is_empty() {
1081+
otel_event.name = std::borrow::Cow::Borrowed(event.metadata().name());
1082+
}
1083+
10741084
let mut extensions = span.extensions_mut();
10751085
let otel_data = extensions.get_mut::<OtelData>();
10761086

@@ -1489,6 +1499,45 @@ mod tests {
14891499
);
14901500
}
14911501

1502+
#[test]
1503+
fn records_event_name() {
1504+
let tracer = TestTracer(Arc::new(Mutex::new(None)));
1505+
let subscriber = tracing_subscriber::registry().with(layer().with_tracer(tracer.clone()));
1506+
1507+
let err = TestDynError::new("base error")
1508+
.with_parent("intermediate error")
1509+
.with_parent("user error");
1510+
1511+
tracing::subscriber::with_default(subscriber, || {
1512+
let span = tracing::debug_span!(
1513+
"request",
1514+
error = &err as &(dyn std::error::Error + 'static)
1515+
);
1516+
1517+
span.in_scope(|| {
1518+
tracing::event!(tracing::Level::INFO, "event name 1");
1519+
tracing::event!(name: "event name 2", tracing::Level::INFO, field1 = "field1");
1520+
});
1521+
});
1522+
1523+
let events = tracer
1524+
.0
1525+
.lock()
1526+
.unwrap()
1527+
.as_ref()
1528+
.unwrap()
1529+
.builder
1530+
.events
1531+
.as_ref()
1532+
.unwrap()
1533+
.clone();
1534+
1535+
let mut iter = events.iter();
1536+
1537+
assert_eq!(iter.next().unwrap().name, "event name 1");
1538+
assert_eq!(iter.next().unwrap().name, "event name 2");
1539+
}
1540+
14921541
#[test]
14931542
fn records_no_error_fields() {
14941543
let tracer = TestTracer(Arc::new(Mutex::new(None)));

0 commit comments

Comments
 (0)