tracing_setup/
dynamic_level.rscrate::ix!();
pub fn setup_dynamic_tracing(initial_level: Level)
-> reload::Handle<EnvFilter, impl tracing::Subscriber + Send + Sync>
{
let filter = EnvFilter::from_default_env()
.add_directive(initial_level.into());
let (filter_layer, reload_handle) = reload::Layer::new(filter);
let subscriber = tracing_subscriber::fmt()
.with_max_level(initial_level)
.finish()
.with(filter_layer);
tracing::subscriber::set_global_default(subscriber).expect("Failed to set subscriber");
reload_handle
}
#[cfg(test)]
mod dynamic_tracing_tests {
use super::*;
use tracing::Level;
use tracing_subscriber::EnvFilter;
#[test]
fn test_dynamic_tracing() {
let reload_handle = setup_dynamic_tracing(Level::INFO);
tracing::info!("This is an info message");
tracing::debug!("This debug message should NOT appear at INFO level");
reload_handle.reload(EnvFilter::new("debug")).unwrap();
tracing::debug!("This debug message should appear at DEBUG level");
}
}