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}