From 284812402e885fecd48cf4d0c7d40fc6569cb458 Mon Sep 17 00:00:00 2001 From: seyyed-dev <185046957+seyyed-dev@users.noreply.github.com> Date: Wed, 17 Sep 2025 00:52:37 +0330 Subject: [PATCH 1/2] add Empty field and record example --- examples/deferred.rs | 8 ++++++++ examples/deferred.stdout | 7 ++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/examples/deferred.rs b/examples/deferred.rs index 89ee6c5..b886b73 100644 --- a/examples/deferred.rs +++ b/examples/deferred.rs @@ -1,3 +1,4 @@ +use tracing::field::Empty; use tracing::{debug, error, info, level_filters::LevelFilter, span, trace, warn, Level}; use tracing_subscriber::{layer::SubscriberExt, registry::Registry, Layer}; use tracing_tree::HierarchicalLayer; @@ -28,6 +29,13 @@ fn main() { println!("-> This prints before the span open message"); + let lazy = span!(Level::DEBUG, "lazy span", work_units = Empty); + lazy.record("work_units", &3); + lazy.in_scope(|| { + info!("doing some work"); + }); + drop(lazy); + let _e2 = server_span.enter(); info!("starting"); std::thread::sleep(std::time::Duration::from_millis(1000)); diff --git a/examples/deferred.stdout b/examples/deferred.stdout index e5335b9..f5160d2 100644 --- a/examples/deferred.stdout +++ b/examples/deferred.stdout @@ -1,6 +1,11 @@ -> This prints before the span open message 1:main┐open: deferred::hierarchical-example version=0.1 -1:main└─┐open: deferred::server host="localhost", port=8080 +1:main└─┐open: deferred::lazy span +1:main ├─ INFO deferred doing some work +1:main ┌┘close(v): deferred::lazy span +1:main┌┘post_close: deferred::hierarchical-example version=0.1 +1:main└┐pre_open: deferred::hierarchical-example version=0.1 +1:main └┐open(v): deferred::server host="localhost", port=8080 1:main ├─ INFO deferred starting 1:main ├─ INFO deferred listening -> Deferring two levels of spans From 306a297b05a81ea348aaa233f9b22ddddf1689db Mon Sep 17 00:00:00 2001 From: seyyed-dev <185046957+seyyed-dev@users.noreply.github.com> Date: Wed, 17 Sep 2025 00:53:54 +0330 Subject: [PATCH 2/2] add on_record --- examples/deferred.stdout | 4 ++-- src/lib.rs | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/examples/deferred.stdout b/examples/deferred.stdout index f5160d2..c8b594f 100644 --- a/examples/deferred.stdout +++ b/examples/deferred.stdout @@ -1,8 +1,8 @@ -> This prints before the span open message 1:main┐open: deferred::hierarchical-example version=0.1 -1:main└─┐open: deferred::lazy span +1:main└─┐open: deferred::lazy span work_units=3 1:main ├─ INFO deferred doing some work -1:main ┌┘close(v): deferred::lazy span +1:main ┌┘close(v): deferred::lazy span work_units=3 1:main┌┘post_close: deferred::hierarchical-example version=0.1 1:main└┐pre_open: deferred::hierarchical-example version=0.1 1:main └┐open(v): deferred::server host="localhost", port=8080 diff --git a/src/lib.rs b/src/lib.rs index a027215..bd74efc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -601,6 +601,18 @@ where } } } + + fn on_record(&self, id: &Id, values: &tracing_core::span::Record<'_>, ctx: Context) { + let Some(_guard) = Self::is_recursive() else { + return; + }; + + if let Some(span) = ctx.span(id) { + if let Some(data) = span.extensions_mut().get_mut::() { + values.record(data); + } + } + } } fn scope_path<'a, R: LookupSpan<'a>>(span: &SpanRef<'a, R>) -> ScopeFromRoot<'a, R> {