dns_common 0.2.1

Personal toolbelt for Rust code
Documentation
use std::env;

use tracing_subscriber::{prelude::*, EnvFilter};

use crate::prelude::*;

static RUST_LOG: &str = "RUST_LOG";

#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(deny_unknown_fields)]
pub struct TracingConfig {
    pub time: bool,
    pub level: String,
}

pub fn init(config: Option<&TracingConfig>) {
    if let Some(tracing) = config {
        let level_is_set = match env::var(RUST_LOG) {
            Err(_) => false,
            Ok(v) => !v.is_empty(),
        };

        if !level_is_set {
            env::set_var(RUST_LOG, &tracing.level);
        }

        let filter = EnvFilter::from_default_env();
        let t = tracing_subscriber::fmt().with_env_filter(filter);
        let res = if tracing.time {
            t.try_init()
        } else {
            t.without_time().try_init()
        };

        if let Err(e) = res {
            error!("unable to set tracing subscriber: {}", e);
        }
    }
}