diff --git a/tracing-subscriber/src/reload.rs b/tracing-subscriber/src/reload.rs index eb87630b99..457b00ed3f 100644 --- a/tracing-subscriber/src/reload.rs +++ b/tracing-subscriber/src/reload.rs @@ -30,7 +30,7 @@ use std::{ use tracing_core::{ callsite, collect::{Collect, Interest}, - span, Event, Metadata, + span, Event, LevelFilter, Metadata, }; /// Wraps a `Filter` or `Subscribe`, allowing it to be reloaded dynamically at runtime. @@ -135,6 +135,11 @@ where fn on_id_change(&self, old: &span::Id, new: &span::Id, ctx: subscribe::Context<'_, C>) { try_lock!(self.inner.read()).on_id_change(old, new, ctx) } + + #[inline] + fn max_level_hint(&self) -> Option { + try_lock!(self.inner.read(), else return None).max_level_hint() + } } #[cfg(all(feature = "registry", feature = "std"))] @@ -188,6 +193,11 @@ where fn on_close(&self, id: span::Id, ctx: subscribe::Context<'_, C>) { try_lock!(self.inner.read()).on_close(id, ctx) } + + #[inline] + fn max_level_hint(&self) -> Option { + try_lock!(self.inner.read(), else return None).max_level_hint() + } } impl Subscriber { diff --git a/tracing-subscriber/tests/reload.rs b/tracing-subscriber/tests/reload.rs index f979087afd..381a307c50 100644 --- a/tracing-subscriber/tests/reload.rs +++ b/tracing-subscriber/tests/reload.rs @@ -1,12 +1,16 @@ -#![cfg(feature = "reload")] +#![cfg(feature = "registry")] use std::sync::atomic::{AtomicUsize, Ordering}; use tracing_core::{ collect::Interest, span::{Attributes, Id, Record}, - Collect, Event, Metadata, + Collect, Event, LevelFilter, Metadata, }; use tracing_subscriber::{prelude::*, reload::*, subscribe}; +fn event() { + tracing::info!("my event"); +} + pub struct NopCollector; impl Collect for NopCollector { @@ -67,9 +71,13 @@ fn reload_handle() { }; true } - } - fn event() { - tracing::trace!("my event"); + + fn max_level_hint(&self) -> Option { + match self { + Filter::One => Some(LevelFilter::INFO), + Filter::Two => Some(LevelFilter::DEBUG), + } + } } let (subscriber, handle) = Subscriber::new(Filter::One); @@ -85,7 +93,9 @@ fn reload_handle() { assert_eq!(FILTER1_CALLS.load(Ordering::SeqCst), 1); assert_eq!(FILTER2_CALLS.load(Ordering::SeqCst), 0); + assert_eq!(LevelFilter::current(), LevelFilter::INFO); handle.reload(Filter::Two).expect("should reload"); + assert_eq!(LevelFilter::current(), LevelFilter::DEBUG); event(); @@ -113,9 +123,13 @@ fn reload_filter() { }; true } - } - fn event() { - tracing::trace!("my event"); + + fn max_level_hint(&self) -> Option { + match self { + Filter::One => Some(LevelFilter::INFO), + Filter::Two => Some(LevelFilter::DEBUG), + } + } } let (filter, handle) = Subscriber::new(Filter::One); @@ -133,7 +147,9 @@ fn reload_filter() { assert_eq!(FILTER1_CALLS.load(Ordering::SeqCst), 1); assert_eq!(FILTER2_CALLS.load(Ordering::SeqCst), 0); + assert_eq!(LevelFilter::current(), LevelFilter::INFO); handle.reload(Filter::Two).expect("should reload"); + assert_eq!(LevelFilter::current(), LevelFilter::DEBUG); event();