1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
use crate::http_client::service;
use crate::r#struct::env_config::{EnvConfig, EnvEnum};
use crate::r#struct::log_level::LogLevel;
// re-export LogSchema to make usable by consumer
pub use crate::r#struct::log_schema::LogSchema;
mod http_client;
mod r#struct;

pub struct Logger {
    env_config: EnvConfig,
}

impl Default for Logger {
    fn default() -> Self {
        let env_config = EnvConfig::default();
        Self { env_config }
    }
}

impl Logger {
    pub fn new(app_version: String, verbose: bool) -> Self {
        let env_config = EnvConfig::new(app_version, verbose);
        Self { env_config }
    }

    #[allow(dead_code)]
    pub async fn info(&self, log: LogSchema) {
        let env_config = &self.env_config;
        let better_log = log.to_betterstack(env_config, LogLevel::Info);
        if better_log.env != EnvEnum::Local {
            let _result = service::push_log(env_config, &better_log).await;
        }
        if env_config.verbose {
            println!("{}", better_log);
        }
    }

    #[allow(dead_code)]
    pub async fn warn(&self, log: LogSchema) {
        let env_config = &self.env_config;
        let better_log = log.to_betterstack(&self.env_config, LogLevel::Warn);
        if better_log.env != EnvEnum::Local {
            let _result = service::push_log(env_config, &better_log).await;
        }
        if self.env_config.verbose {
            println!("{}", better_log);
        }
    }

    #[allow(dead_code)]
    pub async fn error(&self, log: LogSchema) {
        let env_config = &self.env_config;
        let better_log = log.to_betterstack(&self.env_config, LogLevel::Error);
        if better_log.env != EnvEnum::Local {
            let _result = service::push_log(env_config, &better_log).await;
        }
        if self.env_config.verbose {
            eprintln!("{}", better_log);
        }
    }

    #[allow(dead_code)]
    pub async fn debug(&self, log: LogSchema) {
        let better_log = log.to_betterstack(&self.env_config, LogLevel::Debug);
        println!("{}", better_log);
    }
}