diff --git a/tokio-trace/src/macros.rs b/tokio-trace/src/macros.rs index f12eb66b0..0d9b93a4c 100644 --- a/tokio-trace/src/macros.rs +++ b/tokio-trace/src/macros.rs @@ -330,6 +330,7 @@ macro_rules! trace_span { span!( $crate::Level::TRACE, target: __tokio_trace_module_path!(), + parent: $parent, $name, $($field)* ) @@ -391,6 +392,7 @@ macro_rules! debug_span { span!( $crate::Level::INFO, target: __tokio_trace_module_path!(), + parent: $parent, $name, $($field)* ) @@ -452,6 +454,7 @@ macro_rules! info_span { span!( $crate::Level::INFO, target: __tokio_trace_module_path!(), + parent: $parent, $name, $($field)* ) @@ -513,6 +516,7 @@ macro_rules! warn_span { span!( $crate::Level::WARN, target: __tokio_trace_module_path!(), + parent: $parent, $name, $($field)* ) @@ -573,6 +577,7 @@ macro_rules! error_span { span!( $crate::Level::ERROR, target: __tokio_trace_module_path!(), + parent: $parent, $name, $($field)* ) diff --git a/tokio-trace/tests/span.rs b/tokio-trace/tests/span.rs index 514213270..d842da1c8 100644 --- a/tokio-trace/tests/span.rs +++ b/tokio-trace/tests/span.rs @@ -584,6 +584,30 @@ fn explicit_child() { handle.assert_finished(); } +#[test] +fn explicit_child_at_levels() { + let (subscriber, handle) = subscriber::mock() + .new_span(span::mock().named("foo")) + .new_span(span::mock().named("a").with_explicit_parent(Some("foo"))) + .new_span(span::mock().named("b").with_explicit_parent(Some("foo"))) + .new_span(span::mock().named("c").with_explicit_parent(Some("foo"))) + .new_span(span::mock().named("d").with_explicit_parent(Some("foo"))) + .new_span(span::mock().named("e").with_explicit_parent(Some("foo"))) + .done() + .run_with_handle(); + + with_default(subscriber, || { + let foo = span!(Level::TRACE, "foo"); + trace_span!(parent: foo.id(), "a"); + debug_span!(parent: foo.id(), "b"); + info_span!(parent: foo.id(), "c"); + warn_span!(parent: foo.id(), "d"); + error_span!(parent: foo.id(), "e"); + }); + + handle.assert_finished(); +} + #[test] fn explicit_child_regardless_of_ctx() { let (subscriber, handle) = subscriber::mock() diff --git a/tokio-trace/tests/support/subscriber.rs b/tokio-trace/tests/support/subscriber.rs index 842640aad..9c976165d 100644 --- a/tokio-trace/tests/support/subscriber.rs +++ b/tokio-trace/tests/support/subscriber.rs @@ -220,7 +220,13 @@ where Some(Parent::Explicit(expected_parent)) => { let actual_parent = span.parent().and_then(|id| spans.get(id)).map(|s| s.name); - assert_eq!(Some(expected_parent.as_ref()), actual_parent); + assert_eq!( + Some(expected_parent.as_ref()), + actual_parent, + "expected {:?} to have explicit parent {:?}", + name, + expected_parent, + ); } Some(Parent::ContextualRoot) => { assert!( @@ -243,7 +249,13 @@ where let stack = self.current.lock().unwrap(); let actual_parent = stack.last().and_then(|id| spans.get(id)).map(|s| s.name); - assert_eq!(Some(expected_parent.as_ref()), actual_parent); + assert_eq!( + Some(expected_parent.as_ref()), + actual_parent, + "expected {:?} to have contextual parent {:?}", + name, + expected_parent, + ); } None => {} }