unit_tracing/
lib.rs

1use tracing_subscriber::{layer::SubscriberExt, EnvFilter, Registry};
2
3const DEFAULT_FILTER: &str = "debug";
4
5/// Инициализация `tracing` для тестов с возможностью фильтрации логов.
6///
7/// Фильтр по умолчанию равен *debug*.
8pub struct TestTracing {
9    filter: Option<String>,
10}
11
12impl TestTracing {
13    pub fn new() -> Self {
14        Self { filter: None }
15    }
16
17    pub fn filter(mut self, filter: impl Into<String>) -> Self {
18        self.filter = Some(filter.into());
19        self
20    }
21
22    pub fn init(self) -> Result<(), Box<dyn std::error::Error>> {
23        let filter = self.filter.unwrap_or(DEFAULT_FILTER.into());
24
25        let filter_layer = EnvFilter::try_new(filter)?;
26
27        let subscriber = Registry::default()
28            .with(tracing_subscriber::fmt::layer())
29            .with(filter_layer);
30
31        tracing::subscriber::set_global_default(subscriber)?;
32
33        Ok(())
34    }
35}
36
37impl Default for TestTracing {
38    fn default() -> Self {
39        Self::new()
40    }
41}