1use std::env;
9
10use colored::Colorize;
11use log::Level;
12use log::Metadata;
13use log::Record;
14
15struct SimpleLogger;
16
17static LOGGER: SimpleLogger = SimpleLogger;
18
19impl log::Log for SimpleLogger {
20 fn enabled(&self, _: &Metadata) -> bool {
21 true
22 }
23
24 fn log(&self, record: &Record) {
25 if self.enabled(record.metadata()) {
26 let level_str = match record.level() {
27 Level::Error => "[ERROR]".red(),
28 Level::Warn => "[WARN]".yellow(),
29 Level::Info => "[INFO]".red(),
30 Level::Debug => "[DEBUG]".white(),
31 Level::Trace => "[TRACE]".black(),
32 };
33 println!("{level_str}: {}", record.args());
34 }
35 }
36
37 fn flush(&self) {
38 }
41}
42
43pub fn init_logger() -> Result<(), log::SetLoggerError> {
44 let max_log_level = if let Ok(env_log) = env::var("RUST_LOG") {
46 let env_log = env_log.to_lowercase();
47 match env_log.as_str() {
48 "trace" => log::LevelFilter::Trace,
49 "debug" => log::LevelFilter::Debug,
50 "warn" => log::LevelFilter::Warn,
51 "error" => log::LevelFilter::Error,
52 _ => log::LevelFilter::Info,
53 }
54 } else {
55 log::LevelFilter::Info
56 };
57
58 log::set_logger(&LOGGER).map(|()| log::set_max_level(max_log_level))
59}