@@ -1071,6 +1071,15 @@ where
1071
1071
sem_conv_config : self . sem_conv_config ,
1072
1072
} ) ;
1073
1073
1074
+ // If the event name is still empty, then there was no special handling of error fields.
1075
+ // It should be safe to set the event name to the name provided by tracing.
1076
+ // 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.
1077
+ // Ideally, the name should be set above when the event is constructed.
1078
+ // see: https://github.com/tokio-rs/tracing-opentelemetry/pull/28
1079
+ if otel_event. name . is_empty ( ) {
1080
+ otel_event. name = std:: borrow:: Cow :: Borrowed ( event. metadata ( ) . name ( ) ) ;
1081
+ }
1082
+
1074
1083
let mut extensions = span. extensions_mut ( ) ;
1075
1084
let otel_data = extensions. get_mut :: < OtelData > ( ) ;
1076
1085
@@ -1489,6 +1498,42 @@ mod tests {
1489
1498
) ;
1490
1499
}
1491
1500
1501
+ #[ test]
1502
+ fn records_event_name ( ) {
1503
+ let tracer = TestTracer ( Arc :: new ( Mutex :: new ( None ) ) ) ;
1504
+ let subscriber = tracing_subscriber:: registry ( ) . with ( layer ( ) . with_tracer ( tracer. clone ( ) ) ) ;
1505
+
1506
+ tracing:: subscriber:: with_default ( subscriber, || {
1507
+ tracing:: debug_span!( "test span" ) . in_scope ( || {
1508
+ tracing:: event!( tracing:: Level :: INFO , "event name 1" ) ; // this is equivalent to 'message = "event name 1"'
1509
+ tracing:: event!( name: "event name 2" , tracing:: Level :: INFO , field1 = "field1" ) ;
1510
+ tracing:: event!( name: "event name 3" , tracing:: Level :: INFO , error = "field2" ) ;
1511
+ tracing:: event!( name: "event name 4" , tracing:: Level :: INFO , message = "field3" ) ;
1512
+ tracing:: event!( name: "event name 5" , tracing:: Level :: INFO , name = "field4" ) ;
1513
+ } ) ;
1514
+ } ) ;
1515
+
1516
+ let events = tracer
1517
+ . 0
1518
+ . lock ( )
1519
+ . unwrap ( )
1520
+ . as_ref ( )
1521
+ . unwrap ( )
1522
+ . builder
1523
+ . events
1524
+ . as_ref ( )
1525
+ . unwrap ( )
1526
+ . clone ( ) ;
1527
+
1528
+ let mut iter = events. iter ( ) ;
1529
+
1530
+ assert_eq ! ( iter. next( ) . unwrap( ) . name, "event name 1" ) ;
1531
+ assert_eq ! ( iter. next( ) . unwrap( ) . name, "event name 2" ) ;
1532
+ assert_eq ! ( iter. next( ) . unwrap( ) . name, "exception" ) ; // error attribute is handled specially
1533
+ assert_eq ! ( iter. next( ) . unwrap( ) . name, "field3" ) ; // message attribute is handled specially
1534
+ assert_eq ! ( iter. next( ) . unwrap( ) . name, "event name 5" ) ; // name attribute should not conflict with event name.
1535
+ }
1536
+
1492
1537
#[ test]
1493
1538
fn records_no_error_fields ( ) {
1494
1539
let tracer = TestTracer ( Arc :: new ( Mutex :: new ( None ) ) ) ;
0 commit comments