@@ -1052,6 +1052,7 @@ where
1052
1052
let target = KeyValue :: new ( target, Value :: String ( meta. target ( ) . into ( ) ) ) ;
1053
1053
1054
1054
let mut otel_event = otel:: Event :: new (
1055
+ // event.metadata().name(),
1055
1056
String :: new ( ) ,
1056
1057
crate :: time:: now ( ) ,
1057
1058
vec ! [
@@ -1071,6 +1072,15 @@ where
1071
1072
sem_conv_config : self . sem_conv_config ,
1072
1073
} ) ;
1073
1074
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
+
1074
1084
let mut extensions = span. extensions_mut ( ) ;
1075
1085
let otel_data = extensions. get_mut :: < OtelData > ( ) ;
1076
1086
@@ -1489,6 +1499,45 @@ mod tests {
1489
1499
) ;
1490
1500
}
1491
1501
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
+
1492
1541
#[ test]
1493
1542
fn records_no_error_fields ( ) {
1494
1543
let tracer = TestTracer ( Arc :: new ( Mutex :: new ( None ) ) ) ;
0 commit comments