Skip to content

Commit 6878e87

Browse files
committed
add attributes of the current span
1 parent 4adcecb commit 6878e87

1 file changed

Lines changed: 32 additions & 5 deletions

File tree

src/tracing_subscriber.rs

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use super::TUI_LOGGER;
44
use log::{self, Log, Record};
55
use std::collections::BTreeMap;
66
use std::fmt;
7+
use tracing_subscriber::registry::LookupSpan;
78
use tracing_subscriber::Layer;
89

910
#[derive(Default)]
@@ -85,20 +86,46 @@ impl<'a> tracing::field::Visit for ToStringVisitor<'a> {
8586
/// tracing::info!("Logging via tracing works!");
8687
/// }
8788
/// ```
89+
90+
struct SpanAttributes {
91+
attributes: String,
92+
}
93+
8894
pub struct TuiTracingSubscriberLayer;
8995

9096
impl<S> Layer<S> for TuiTracingSubscriberLayer
9197
where
92-
S: tracing::Subscriber,
98+
S: tracing::Subscriber + for<'a> LookupSpan<'a>,
9399
{
94-
fn on_event(
100+
fn on_new_span(
95101
&self,
96-
event: &tracing::Event<'_>,
97-
_ctx: tracing_subscriber::layer::Context<'_, S>,
102+
attrs: &tracing::span::Attributes<'_>,
103+
id: &tracing::span::Id,
104+
ctx: tracing_subscriber::layer::Context<'_, S>,
98105
) {
106+
let mut visitor = ToStringVisitor::default();
107+
attrs.record(&mut visitor);
108+
ctx.span(id)
109+
.unwrap()
110+
.extensions_mut()
111+
.insert(SpanAttributes {
112+
attributes: format!("{}", visitor),
113+
});
114+
}
115+
116+
fn on_event(&self, event: &tracing::Event<'_>, ctx: tracing_subscriber::layer::Context<'_, S>) {
99117
let mut visitor = ToStringVisitor::default();
100118
event.record(&mut visitor);
101119

120+
let span_attributes = ctx
121+
.event_span(event)
122+
.and_then(|s| {
123+
s.extensions()
124+
.get::<SpanAttributes>()
125+
.map(|a| a.attributes.to_owned())
126+
})
127+
.unwrap_or_else(String::new);
128+
102129
let level = match *event.metadata().level() {
103130
tracing::Level::ERROR => log::Level::Error,
104131
tracing::Level::WARN => log::Level::Warn,
@@ -109,7 +136,7 @@ where
109136

110137
TUI_LOGGER.log(
111138
&Record::builder()
112-
.args(format_args!("{}", visitor))
139+
.args(format_args!("{}{}", span_attributes, visitor))
113140
.level(level)
114141
.target(event.metadata().target())
115142
.file(event.metadata().file())

0 commit comments

Comments
 (0)