torrust_index_backend/bootstrap/
logging.rs
1use std::str::FromStr;
10use std::sync::Once;
11
12use log::{info, LevelFilter};
13
14static INIT: Once = Once::new();
15
16pub fn setup(log_level: &Option<String>) {
17 let level = config_level_or_default(log_level);
18
19 if level == log::LevelFilter::Off {
20 return;
21 }
22
23 INIT.call_once(|| {
24 stdout_config(level);
25 });
26}
27
28fn config_level_or_default(log_level: &Option<String>) -> LevelFilter {
29 match log_level {
30 None => log::LevelFilter::Info,
31 Some(level) => LevelFilter::from_str(level).unwrap(),
32 }
33}
34
35fn stdout_config(level: LevelFilter) {
36 if let Err(_err) = fern::Dispatch::new()
37 .format(|out, message, record| {
38 out.finish(format_args!(
39 "{} [{}][{}] {}",
40 chrono::Local::now().format("%+"),
41 record.target(),
42 record.level(),
43 message
44 ));
45 })
46 .level(level)
47 .chain(std::io::stdout())
48 .apply()
49 {
50 panic!("Failed to initialize logging.")
51 }
52
53 info!("logging initialized.");
54}