1use env_logger::fmt::Color;
2use log::Level;
3use std::{env, io::Write};
4
5pub fn init_log(default_level: Option<&str>) {
7 if let Some(default_level) = default_level {
8 if env::var("RUST_LOG").is_err() {
9 env::set_var("RUST_LOG", default_level);
10 }
11 }
12
13 env_logger::Builder::from_default_env()
14 .format(|buf, record| {
15 let mut style = buf.style();
16 style.set_bold(true);
17 let message = style.value(record.args());
18
19 let timestamp = buf.timestamp();
20
21 let mut style = buf.style();
22 let level = match record.level() {
23 Level::Trace => style.set_color(Color::Magenta).value("TRACE"),
24 Level::Debug => style.set_color(Color::Blue).value("DEBUG"),
25 Level::Info => style.set_color(Color::Green).value("INFO"),
26 Level::Warn => style.set_color(Color::Yellow).value("WARN"),
27 Level::Error => style.set_color(Color::Red).value("ERROR"),
28 };
29
30 writeln!(buf, "[{}]({}): {}", level, timestamp, message)
31 })
32 .init();
33}