Skip to main content

sidedns_core/
logging.rs

1use tracing::level_filters::LevelFilter;
2use tracing_subscriber::{EnvFilter, Layer, fmt, layer::SubscriberExt, util::SubscriberInitExt};
3
4/// Initialize the tracing subscriber.
5///
6/// - **debug build** — stdout only
7/// - **release build** — rolling daily file in the OS data directory
8/// - **`verbose = true`** — file + stdout regardless of build profile
9pub fn init(verbose: bool) {
10    let filter = EnvFilter::try_from_default_env()
11        .unwrap_or_else(|_| EnvFilter::new(LevelFilter::INFO.to_string()));
12
13    let stdout_layer = fmt::layer().with_target(false).with_filter(filter.clone());
14
15    #[cfg(debug_assertions)]
16    {
17        let _ = verbose;
18        tracing_subscriber::registry().with(stdout_layer).init();
19    }
20
21    #[cfg(not(debug_assertions))]
22    {
23        use crate::{APP_DATA_DIR, APP_NAME};
24        use tracing_appender::rolling;
25
26        std::fs::create_dir_all(APP_DATA_DIR.as_path()).ok();
27
28        let file_appender = rolling::daily(
29            APP_DATA_DIR.as_path(),
30            format!("{}.log", APP_NAME.to_lowercase()),
31        );
32        let file_layer = fmt::layer()
33            .with_ansi(false)
34            .with_target(false)
35            .with_writer(file_appender)
36            .with_filter(filter);
37
38        if verbose {
39            tracing_subscriber::registry()
40                .with(file_layer)
41                .with(stdout_layer)
42                .init();
43        } else {
44            tracing_subscriber::registry().with(file_layer).init();
45        }
46    }
47}
48
49pub fn init_stdout() {
50    let filter = EnvFilter::try_from_default_env()
51        .unwrap_or_else(|_| EnvFilter::new(LevelFilter::INFO.to_string()));
52
53    let stdout_layer = fmt::layer().with_target(false).with_filter(filter.clone());
54
55    tracing_subscriber::registry().with(stdout_layer).init();
56}