use std::env;
use colored::Colorize;
use log::Level;
use log::Metadata;
use log::Record;
struct SimpleLogger;
static LOGGER: SimpleLogger = SimpleLogger;
impl log::Log for SimpleLogger {
fn enabled(&self, _: &Metadata) -> bool {
true
}
fn log(&self, record: &Record) {
if self.enabled(record.metadata()) {
let level_str = match record.level() {
Level::Error => "[ERROR]".red(),
Level::Warn => "[WARN]".yellow(),
Level::Info => "[INFO]".red(),
Level::Debug => "[DEBUG]".white(),
Level::Trace => "[TRACE]".black(),
};
println!("{level_str}: {}", record.args());
}
}
fn flush(&self) {
}
}
pub fn init_logger() -> Result<(), log::SetLoggerError> {
let max_log_level = if let Ok(env_log) = env::var("RUST_LOG") {
let env_log = env_log.to_lowercase();
match env_log.as_str() {
"trace" => log::LevelFilter::Trace,
"debug" => log::LevelFilter::Debug,
"warn" => log::LevelFilter::Warn,
"error" => log::LevelFilter::Error,
_ => log::LevelFilter::Info,
}
} else {
log::LevelFilter::Info
};
log::set_logger(&LOGGER).map(|()| log::set_max_level(max_log_level))
}