libobservability-rs 0.1.1

A library for observability
Documentation
use slog::{Drain, Logger};

#[derive(Debug, Clone)]
pub struct Log {
    logger: Option<Logger>,
    level: log::Level,
}

impl Default for Log {
    fn default() -> Self {
        Self::new()
    }
}

impl Log {
    pub fn new() -> Self {
        Log {
            logger: None,
            level: log::Level::Info,
        }
    }
    pub fn logger(&self) -> Self {
        let logger = if true {
            // opts.json
            let drain = slog_json::Json::new(std::io::stdout())
                .add_default_keys()
                .build()
                .fuse();
            let drain = slog_async::Async::new(drain).build().fuse();
            slog::Logger::root(drain, slog::o!())
        } else {
            let decorator = slog_term::TermDecorator::new().build();
            let drain = slog_term::FullFormat::new(decorator).build().fuse();
            let drain = slog_async::Async::new(drain).build().fuse();
            slog::Logger::root(drain, slog::o!())
        };

        Self {
            logger: Some(logger),
            level: self.level,
        }
    }
    pub fn guard(&self) -> slog_scope::GlobalLoggerGuard {
        slog_scope::set_global_logger(self.logger.clone().unwrap())
    }

    pub fn set_level(&mut self, debug: bool) -> Self {
        if debug {
            self.level = log::Level::Debug;
        }
        slog_stdlog::init_with_level(self.level).expect("Could not set log level");

        self.clone()
    }
}