diff --git a/src/core/log/mod.rs b/src/core/log/mod.rs index 556bf2f8..c8330903 100644 --- a/src/core/log/mod.rs +++ b/src/core/log/mod.rs @@ -3,10 +3,12 @@ pub mod color; pub mod fmt; mod reload; mod server; +mod suppress; pub use capture::Capture; pub use reload::{LogLevelReloadHandles, ReloadHandle}; pub use server::Server; +pub use suppress::Suppress; pub use tracing::Level; pub use tracing_core::{Event, Metadata}; diff --git a/src/core/log/suppress.rs b/src/core/log/suppress.rs new file mode 100644 index 00000000..6e883086 --- /dev/null +++ b/src/core/log/suppress.rs @@ -0,0 +1,38 @@ +use std::sync::Arc; + +use super::EnvFilter; +use crate::Server; + +pub struct Suppress { + server: Arc, + restore: EnvFilter, +} + +impl Suppress { + pub fn new(server: &Arc) -> Self { + let config = &server.config.log; + Self::from_filters(server, EnvFilter::try_new(config).unwrap_or_default(), &EnvFilter::default()) + } + + fn from_filters(server: &Arc, restore: EnvFilter, suppress: &EnvFilter) -> Self { + server + .log + .reload + .reload(suppress) + .expect("log filter reloaded"); + Self { + server: server.clone(), + restore, + } + } +} + +impl Drop for Suppress { + fn drop(&mut self) { + self.server + .log + .reload + .reload(&self.restore) + .expect("log filter reloaded"); + } +}