vine_core/
logger.rs

1use log4rs::config::RawConfig;
2use serde::Deserialize;
3use crate::context::context::Context;
4use crate::core::Error;
5
6const DEFAULT_LOGGING_CONFIG: &str = r#"
7{
8    "appenders": {
9        "stdout": {
10            "kind": "console",
11            "encoder": {
12                "pattern": "{d(%Y-%m-%dT%H:%M:%S%.3fZ)} {pid} --- [{T:15.15}] {h({l:>5.5})} {M}: {m}{n}"
13            }
14        }
15    },
16    "root": {
17        "level": "info",
18        "appenders": ["stdout"]
19    }
20}
21"#;
22
23pub fn init_logger(config: &Context) -> Result<(), Error> {
24    let config = config.get_bean::<config::Config>("config")?;
25
26    let raw_config_value = config.get::<serde_json::Value>("logging")
27        .unwrap_or_else(|_| serde_json::from_str::<serde_json::Value>(DEFAULT_LOGGING_CONFIG).unwrap());
28
29    let raw_config = RawConfig::deserialize(raw_config_value).unwrap_or_else(|_| {
30        RawConfig::default()
31    });
32
33    log4rs::init_raw_config(raw_config).map_err(|_| {
34        Error::from(r#"
35            TODO: doc - logger init error
36        "#)
37    })
38}