use colored::Colorize;
use log::Level;
use std::env;
pub use log::LevelFilter;
struct MicroLog {}
#[inline]
pub fn init(level: LevelFilter) {
try_init(level).expect("Failed to set logger. Did you already set a logger?");
}
pub fn try_init(mut level: LevelFilter) -> Result<(), log::SetLoggerError> {
static LOGGER: MicroLog = MicroLog {};
if let Ok(rust_log_var) = env::var("RUST_LOG") {
if let Ok(rust_log_var) = rust_log_var.parse::<LevelFilter>() {
level = rust_log_var;
}
}
log::set_logger(&LOGGER)?;
log::set_max_level(level);
Ok(())
}
impl log::Log for MicroLog {
fn enabled(&self, _metadata: &log::Metadata) -> bool {
true
}
fn log(&self, record: &log::Record) {
if self.enabled(record.metadata()) {
let lvl = match record.level() {
Level::Error => "Error".red(),
Level::Warn => "Warn ".yellow(),
Level::Info => "Info ".green(),
Level::Debug => "Debug".blue(),
Level::Trace => "Trace".white(),
};
eprintln!("{} {}", lvl, record.args());
}
}
fn flush(&self) {}
}