Skip to content

Commit 22dc571

Browse files
committed
Let Subscribe::on_event hide event from lower layers
1 parent 989fb62 commit 22dc571

File tree

5 files changed

+30
-18
lines changed

5 files changed

+30
-18
lines changed

tracing-journald/src/lib.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
)]
4040
#[cfg(unix)]
4141
use std::os::unix::net::UnixDatagram;
42-
use std::{fmt, io, io::Write};
42+
use std::{fmt, io, io::Write, ops::ControlFlow};
4343

4444
use tracing_core::{
4545
event::Event,
@@ -242,7 +242,7 @@ where
242242
});
243243
}
244244

245-
fn on_event(&self, event: &Event, ctx: Context<C>) {
245+
fn on_event(&self, event: &Event, ctx: Context<C>) -> ControlFlow<()> {
246246
let mut buf = Vec::with_capacity(256);
247247

248248
// Record span fields
@@ -269,6 +269,8 @@ where
269269

270270
// At this point we can't handle the error anymore so just ignore it.
271271
let _ = self.send_payload(&buf);
272+
273+
ControlFlow::Continue(())
272274
}
273275
}
274276

tracing-opentelemetry/src/subscriber.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use opentelemetry::{
66
use std::fmt;
77
use std::marker;
88
use std::time::{Instant, SystemTime};
9-
use std::{any::TypeId, ptr::NonNull};
9+
use std::{any::TypeId, ops::ControlFlow, ptr::NonNull};
1010
use tracing_core::span::{self, Attributes, Id, Record};
1111
use tracing_core::{field, Collect, Event};
1212
#[cfg(feature = "tracing-log")]
@@ -541,7 +541,7 @@ where
541541
/// [`Event`]: opentelemetry::trace::Event
542542
/// [`ERROR`]: tracing::Level::ERROR
543543
/// [`Error`]: opentelemetry::trace::StatusCode::Error
544-
fn on_event(&self, event: &Event<'_>, ctx: Context<'_, C>) {
544+
fn on_event(&self, event: &Event<'_>, ctx: Context<'_, C>) -> ControlFlow<()> {
545545
// Ignore events that are not in the context of a span
546546
if let Some(span) = ctx.lookup_current() {
547547
// Performing read operations before getting a write lock to avoid a deadlock
@@ -613,6 +613,8 @@ where
613613
}
614614
}
615615
};
616+
617+
ControlFlow::Continue(())
616618
}
617619

618620
/// Exports an OpenTelemetry [`Span`] on close.

tracing-subscriber/src/fmt/fmt_subscriber.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ use crate::{
66
};
77
use format::{FmtSpan, TimingDisplay};
88
use std::{
9-
any::TypeId, cell::RefCell, fmt, io, marker::PhantomData, ops::Deref, ptr::NonNull,
10-
time::Instant,
9+
any::TypeId, cell::RefCell, fmt, io, marker::PhantomData, ops::ControlFlow, ops::Deref,
10+
ptr::NonNull, time::Instant,
1111
};
1212
use tracing_core::{
1313
field,
@@ -725,7 +725,7 @@ where
725725
}
726726
}
727727

728-
fn on_event(&self, event: &Event<'_>, ctx: Context<'_, C>) {
728+
fn on_event(&self, event: &Event<'_>, ctx: Context<'_, C>) -> ControlFlow<()> {
729729
thread_local! {
730730
static BUF: RefCell<String> = RefCell::new(String::new());
731731
}
@@ -761,6 +761,8 @@ where
761761

762762
buf.clear();
763763
});
764+
765+
ControlFlow::Continue(())
764766
}
765767

766768
unsafe fn downcast_raw(&self, id: TypeId) -> Option<NonNull<()>> {

tracing-subscriber/src/reload.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use crate::sync::RwLock;
1515

1616
use std::{
1717
error, fmt,
18+
ops::ControlFlow,
1819
sync::{Arc, Weak},
1920
};
2021
use tracing_core::{
@@ -94,8 +95,8 @@ where
9495
}
9596

9697
#[inline]
97-
fn on_event(&self, event: &Event<'_>, ctx: subscribe::Context<'_, C>) {
98-
try_lock!(self.inner.read()).on_event(event, ctx)
98+
fn on_event(&self, event: &Event<'_>, ctx: subscribe::Context<'_, C>) -> ControlFlow<()> {
99+
try_lock!(self.inner.read(), else return ControlFlow::Continue(())).on_event(event, ctx)
99100
}
100101

101102
#[inline]

tracing-subscriber/src/subscribe.rs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use tracing_core::{
1010
#[cfg(all(feature = "std", feature = "registry"))]
1111
use crate::registry::Registry;
1212
use crate::registry::{self, LookupSpan, SpanRef};
13-
use core::{any::TypeId, cmp, marker::PhantomData, ptr::NonNull};
13+
use core::{any::TypeId, cmp, marker::PhantomData, ops::ControlFlow, ptr::NonNull};
1414

1515
feature! {
1616
#![feature = "alloc"]
@@ -316,7 +316,9 @@ where
316316
fn on_follows_from(&self, _span: &span::Id, _follows: &span::Id, _ctx: Context<'_, C>) {}
317317

318318
/// Notifies this subscriber that an event has occurred.
319-
fn on_event(&self, _event: &Event<'_>, _ctx: Context<'_, C>) {}
319+
fn on_event(&self, _event: &Event<'_>, _ctx: Context<'_, C>) -> ControlFlow<()> {
320+
ControlFlow::Continue(())
321+
}
320322

321323
/// Notifies this subscriber that a span with the given ID was entered.
322324
fn on_enter(&self, _id: &span::Id, _ctx: Context<'_, C>) {}
@@ -755,9 +757,9 @@ where
755757
}
756758

757759
#[inline]
758-
fn on_event(&self, event: &Event<'_>, ctx: Context<'_, C>) {
759-
self.inner.on_event(event, ctx.clone());
760-
self.subscriber.on_event(event, ctx);
760+
fn on_event(&self, event: &Event<'_>, ctx: Context<'_, C>) -> ControlFlow<()> {
761+
self.subscriber.on_event(event, ctx.clone())?;
762+
self.inner.on_event(event, ctx)
761763
}
762764

763765
#[inline]
@@ -846,9 +848,11 @@ where
846848
}
847849

848850
#[inline]
849-
fn on_event(&self, event: &Event<'_>, ctx: Context<'_, C>) {
851+
fn on_event(&self, event: &Event<'_>, ctx: Context<'_, C>) -> ControlFlow<()> {
850852
if let Some(ref inner) = self {
851-
inner.on_event(event, ctx);
853+
inner.on_event(event, ctx)
854+
} else {
855+
ControlFlow::Continue(())
852856
}
853857
}
854858

@@ -927,7 +931,7 @@ feature! {
927931
}
928932

929933
#[inline]
930-
fn on_event(&self, event: &Event<'_>, ctx: Context<'_, C>) {
934+
fn on_event(&self, event: &Event<'_>, ctx: Context<'_, C>) -> ControlFlow<()> {
931935
self.deref().on_event(event, ctx)
932936
}
933937

@@ -1441,9 +1445,10 @@ pub(crate) mod tests {
14411445
where
14421446
S: Collect + for<'lookup> LookupSpan<'lookup>,
14431447
{
1444-
fn on_event(&self, event: &Event<'_>, ctx: Context<'_, S>) {
1448+
fn on_event(&self, event: &Event<'_>, ctx: Context<'_, S>) -> ControlFlow<()> {
14451449
let span = ctx.event_span(event);
14461450
*self.last_event_span.lock().unwrap() = span.map(|s| s.name());
1451+
ControlFlow::Continue(())
14471452
}
14481453
}
14491454

0 commit comments

Comments
 (0)