Skip to content

Commit f6643c5

Browse files
Apply dynamic filter again for individual events
It turns out that the `event_enabled` is not yet implemented on `EnvFilter`. It has created issues that dynamic filters are effectively ignored, when this filter is composed with another layer through `with_filter` combinator. Related to rust-lang/rust#147613 Signed-off-by: Xiangfei Ding <[email protected]>
1 parent c297a37 commit f6643c5

File tree

1 file changed

+29
-1
lines changed
  • tracing-subscriber/src/filter/env

1 file changed

+29
-1
lines changed

tracing-subscriber/src/filter/env/mod.rs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use tracing_core::{
2424
field::Field,
2525
span,
2626
subscriber::{Interest, Subscriber},
27-
Metadata,
27+
Event, Metadata,
2828
};
2929

3030
/// A [`Layer`] which filters spans and events based on a set of filter
@@ -539,6 +539,30 @@ impl EnvFilter {
539539
false
540540
}
541541

542+
fn event_enabled<S>(&self, event: &Event<'_>, _: &Context<'_, S>) -> bool {
543+
let metadata = event.metadata();
544+
let &level = metadata.level();
545+
if self.has_dynamics && self.dynamics.max_level >= level {
546+
// We test against callsite one more time for the event
547+
let enabled_by_cs = self
548+
.by_cs
549+
.read()
550+
.ok()
551+
.map_or(false, |by_cs| by_cs.contains_key(&metadata.callsite()));
552+
if enabled_by_cs {
553+
return true;
554+
}
555+
556+
let scope = self.scope.get_or_default().borrow();
557+
if scope.is_empty() {
558+
return false;
559+
}
560+
return scope.iter().any(|&filter| filter >= level);
561+
}
562+
// Somehow the event hits here even though static checks should filter it out?
563+
false
564+
}
565+
542566
/// Returns an optional hint of the highest [verbosity level][level] that
543567
/// this `EnvFilter` will enable.
544568
///
@@ -711,6 +735,10 @@ feature! {
711735
self.enabled(meta, ctx.clone())
712736
}
713737

738+
fn event_enabled(&self, event: &Event<'_>, cx: &Context<'_, S>) -> bool {
739+
self.event_enabled(event, cx)
740+
}
741+
714742
#[inline]
715743
fn callsite_enabled(&self, meta: &'static Metadata<'static>) -> Interest {
716744
self.register_callsite(meta)

0 commit comments

Comments
 (0)