@@ -244,28 +244,28 @@ where
244244 // Visit fields.
245245 event. record ( & mut visitor) ;
246246
247- /* #[cfg(feature = "experimental_use_tracing_span_context")]
247+ #[ cfg( feature = "experimental_use_tracing_span_context" ) ]
248248 if let Some ( span) = _ctx. event_span ( event) {
249- use opentelemetry::trace::TraceContextExt;
250249 use tracing_opentelemetry:: OtelData ;
251250 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 {
251+ if let Some ( span_id) = otd. span_id ( ) {
252+ // Try the trace_id of the current span first;
253+ // If it is not already established (still in the Builder state), try finding the root span.
254+ let opt_trace_id = otd . trace_id ( ) . or_else ( || {
256255 span. scope ( ) . last ( ) . and_then ( |root_span| {
257256 root_span
258257 . extensions ( )
259258 . get :: < OtelData > ( )
260- .and_then(|otd| otd.builder. trace_id)
259+ . and_then ( |root_otd| root_otd . trace_id ( ) )
261260 } )
262- };
261+ } ) ;
263262 if let Some ( trace_id) = opt_trace_id {
263+ // Unable to reliably obtain TraceFlags (old implementation also passed None)
264264 log_record. set_trace_context ( trace_id, span_id, None ) ;
265265 }
266266 }
267267 }
268- }*/
268+ }
269269
270270 //emit record
271271 self . logger . emit ( log_record) ;
@@ -611,7 +611,7 @@ mod tests {
611611 }
612612 }
613613
614- /* #[cfg(feature = "experimental_use_tracing_span_context")]
614+ #[ cfg( feature = "experimental_use_tracing_span_context" ) ]
615615 #[ test]
616616 fn tracing_appender_inside_tracing_crate_context ( ) {
617617 use opentelemetry:: { trace:: SpanContext , Context , SpanId , TraceId } ;
@@ -685,17 +685,20 @@ mod tests {
685685 ) ;
686686
687687 // Act again.
688- tracing::error_span!("outer-span").in_scope(|| {
689- let span = tracing::Span::current();
688+ {
690689 let parent_context = Context :: current ( ) . with_remote_span_context ( remote_span_context) ;
691- span.set_parent(parent_context);
690+ let outer_span = tracing:: error_span!( "outer-span" ) ;
691+ let _ = outer_span. set_parent ( parent_context) ;
692692
693- error!("first-event");
693+ outer_span. in_scope ( || {
694+ error ! ( "first-event" ) ;
694695
695- tracing::error_span!("inner-span").in_scope(|| {
696- error!("second-event");
696+ let inner_span = tracing:: error_span!( "inner-span" ) ;
697+ inner_span. in_scope ( || {
698+ error ! ( "second-event" ) ;
699+ } ) ;
697700 } ) ;
698- });
701+ }
699702
700703 assert ! ( logger_provider. force_flush( ) . is_ok( ) ) ;
701704
@@ -722,7 +725,6 @@ mod tests {
722725 assert_eq ! ( trace_ctx0. span_id, outer_span_id) ;
723726 assert_eq ! ( trace_ctx1. span_id, inner_span_id) ;
724727 }
725- */
726728
727729 #[ test]
728730 fn tracing_appender_standalone_with_tracing_log ( ) {
0 commit comments