tracing_setup/
dynamic_level.rs1crate::ix!();
2
3pub fn setup_dynamic_tracing(initial_level: Level)
4 -> reload::Handle<EnvFilter, impl tracing::Subscriber + Send + Sync>
5{
6 let filter = EnvFilter::from_default_env()
8 .add_directive(initial_level.into());
9
10 let (filter_layer, reload_handle) = reload::Layer::new(filter);
12
13 let subscriber = tracing_subscriber::fmt()
15 .with_max_level(initial_level)
16 .finish()
17 .with(filter_layer);
18
19 tracing::subscriber::set_global_default(subscriber).expect("Failed to set subscriber");
20
21 reload_handle
22}
23
24#[cfg(test)]
25mod dynamic_tracing_tests {
26 use super::*;
27 use tracing::Level;
28 use tracing_subscriber::EnvFilter;
29
30 #[test]
31 fn test_dynamic_tracing() {
32 let reload_handle = setup_dynamic_tracing(Level::INFO);
34
35 tracing::info!("This is an info message");
37 tracing::debug!("This debug message should NOT appear at INFO level");
38
39 reload_handle.reload(EnvFilter::new("debug")).unwrap();
41
42 tracing::debug!("This debug message should appear at DEBUG level");
43 }
44}