diff --git a/tracing-subscriber/src/fmt/fmt_layer.rs b/tracing-subscriber/src/fmt/fmt_layer.rs index 9dbc0fe89..93a1150c6 100644 --- a/tracing-subscriber/src/fmt/fmt_layer.rs +++ b/tracing-subscriber/src/fmt/fmt_layer.rs @@ -797,6 +797,7 @@ impl fmt::Display for FormattedFields { } } +// TODO: Evaluate removing Deref in future versions, as its a powerful tool and barely useful (consumers can just call `.fields` directly) impl Deref for FormattedFields { type Target = String; fn deref(&self) -> &Self::Target { @@ -1631,8 +1632,7 @@ mod test { .with_timer(MockTime) .with_span_events(FmtSpan::ACTIVE); - let (reloadable_layer, reload_handle) = - crate::reload::Layer::new(inner_layer); + let (reloadable_layer, reload_handle) = crate::reload::Layer::new(inner_layer); let reload = reloadable_layer.with_subscriber(Registry::default()); with_default(reload, || { diff --git a/tracing-subscriber/src/fmt/format/mod.rs b/tracing-subscriber/src/fmt/format/mod.rs index f5da2da66..456fcf657 100644 --- a/tracing-subscriber/src/fmt/format/mod.rs +++ b/tracing-subscriber/src/fmt/format/mod.rs @@ -969,7 +969,7 @@ where let ext = span.extensions(); if let Some(fields) = &ext.get::>() { - if !fields.is_empty() { + if !fields.fields.is_empty() { write!(writer, "{}{}{}", bold.paint("{"), fields, bold.paint("}"))?; } } @@ -1146,7 +1146,7 @@ where { let exts = span.extensions(); if let Some(fields) = exts.get::>() { - if !fields.is_empty() { + if !fields.fields.is_empty() { write!(writer, " {}", dimmed.paint(&fields.fields))?; } } diff --git a/tracing-subscriber/src/fmt/format/pretty.rs b/tracing-subscriber/src/fmt/format/pretty.rs index a6713542a..aa7b3830b 100644 --- a/tracing-subscriber/src/fmt/format/pretty.rs +++ b/tracing-subscriber/src/fmt/format/pretty.rs @@ -324,7 +324,7 @@ where let fields = &ext .get::>() .expect("Unable to find FormattedFields in extensions; this is a bug"); - if !fields.is_empty() { + if !fields.fields.is_empty() { write!(writer, " {} {}", dimmed.paint("with"), fields)?; } writer.write_char('\n')?; @@ -346,7 +346,7 @@ impl<'writer> FormatFields<'writer> for Pretty { current: &'writer mut FormattedFields, fields: &span::Record<'_>, ) -> fmt::Result { - let empty = current.is_empty(); + let empty = current.fields.is_empty(); let writer = current.as_writer(); let mut v = PrettyVisitor::new(writer, empty); fields.record(&mut v); diff --git a/tracing/src/span.rs b/tracing/src/span.rs index 46e9cf82c..23a4f8509 100644 --- a/tracing/src/span.rs +++ b/tracing/src/span.rs @@ -1187,6 +1187,11 @@ impl Span { /// **Note**: To record several values in just one call, see the [`record_all!`](crate::record_all!) macro. /// /// + ///
+    ///     Note: FmtSubscriber has a bug
+    ///     where it might duplicates span fields because of its implementation. See details at:  Github
+    /// 
+ /// /// [`field::Empty`]: super::field::Empty /// [`Metadata`]: super::Metadata pub fn record(