From 5df744343743ff453fcfd1f33cad886308ea3a96 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Thu, 13 Jun 2024 02:15:51 +0000 Subject: [PATCH] add log suppression tool Signed-off-by: Jason Volk --- src/core/log/mod.rs | 2 ++ src/core/log/suppress.rs | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 src/core/log/suppress.rs 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"); + } +}