diff --git a/tracing-subscriber/src/subscribe/layered.rs b/tracing-subscriber/src/subscribe/layered.rs index f5e71e5244..85c8734cbd 100644 --- a/tracing-subscriber/src/subscribe/layered.rs +++ b/tracing-subscriber/src/subscribe/layered.rs @@ -114,8 +114,10 @@ where } fn event(&self, event: &Event<'_>) { - self.inner.event(event); - self.subscriber.on_event(event, self.ctx()); + if self.subscriber.event_enabled(event, self.ctx()) { + self.inner.event(event); + self.subscriber.on_event(event, self.ctx()); + } } fn enter(&self, span: &span::Id) { @@ -255,6 +257,17 @@ where self.subscriber.on_follows_from(span, follows, ctx); } + #[inline] + fn event_enabled(&self, event: &Event<'_>, ctx: Context<'_, C>) -> bool { + if self.subscriber.event_enabled(event, ctx.clone()) { + // if the outer subscriber enables the event, ask the inner subscriber. + self.inner.event_enabled(event, ctx) + } else { + // otherwise, the callsite is disabled by this subscriber + false + } + } + #[inline] fn on_event(&self, event: &Event<'_>, ctx: Context<'_, C>) { self.inner.on_event(event, ctx.clone()); diff --git a/tracing-subscriber/src/subscribe/mod.rs b/tracing-subscriber/src/subscribe/mod.rs index 71127fe10c..0822fd06f2 100644 --- a/tracing-subscriber/src/subscribe/mod.rs +++ b/tracing-subscriber/src/subscribe/mod.rs @@ -1504,6 +1504,14 @@ where } } + #[inline] + fn event_enabled(&self, event: &Event<'_>, ctx: Context<'_, C>) -> bool { + match self { + Some(ref inner) => inner.event_enabled(event, ctx), + None => false, + } + } + #[inline] fn on_event(&self, event: &Event<'_>, ctx: Context<'_, C>) { if let Some(ref inner) = self { @@ -1583,6 +1591,11 @@ macro_rules! subscriber_impl_body { self.deref().on_follows_from(span, follows, ctx) } + #[inline] + fn event_enabled(&self, event: &Event<'_>, ctx: Context<'_, C>) -> bool { + self.deref().event_enabled(event, ctx) + } + #[inline] fn on_event(&self, event: &Event<'_>, ctx: Context<'_, C>) { self.deref().on_event(event, ctx)