libobservability_rs/log/
mod.rs1use 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 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}