libobservability_rs/log/
mod.rs

1use slog::{Drain, Logger};
2
3#[derive(Debug, Clone)]
4pub struct Log {
5    logger: Option<Logger>,
6    level: log::Level,
7}
8
9impl Default for Log {
10    fn default() -> Self {
11        Self::new()
12    }
13}
14
15impl Log {
16    pub fn new() -> Self {
17        Log {
18            logger: None,
19            level: log::Level::Info,
20        }
21    }
22    pub fn logger(&self) -> Self {
23        let logger = if true {
24            // opts.json
25            let drain = slog_json::Json::new(std::io::stdout())
26                .add_default_keys()
27                .build()
28                .fuse();
29            let drain = slog_async::Async::new(drain).build().fuse();
30            slog::Logger::root(drain, slog::o!())
31        } else {
32            let decorator = slog_term::TermDecorator::new().build();
33            let drain = slog_term::FullFormat::new(decorator).build().fuse();
34            let drain = slog_async::Async::new(drain).build().fuse();
35            slog::Logger::root(drain, slog::o!())
36        };
37
38        Self {
39            logger: Some(logger),
40            level: self.level,
41        }
42    }
43    pub fn guard(&self) -> slog_scope::GlobalLoggerGuard {
44        slog_scope::set_global_logger(self.logger.clone().unwrap())
45    }
46
47    pub fn set_level(&mut self, debug: bool) -> Self {
48        if debug {
49            self.level = log::Level::Debug;
50        }
51        slog_stdlog::init_with_level(self.level).expect("Could not set log level");
52
53        self.clone()
54    }
55}