use comat::{cformat_args, cprintln}; use log::{Level, Metadata, Record}; pub struct Logger {} pub fn init(level: Level) { static LOGGER: Logger = Logger {}; log::set_logger(&LOGGER) .map(|()| log::set_max_level(level.to_level_filter())) .unwrap(); } impl log::Log for Logger { fn enabled(&self, _: &Metadata) -> bool { true } fn log(&self, record: &Record) { match record.level() { Level::Info => println!("{}", record.args()), l => { cprintln!( "[{} {:bold_blue}:{:blue}] {}", match l { Level::Error => cformat_args!("{bold_red}err{reset}"), Level::Warn => cformat_args!("{bold_yellow}wrn{reset}"), Level::Trace => cformat_args!("{magenta}trc{reset}"), Level::Debug => cformat_args!("{green}dbg{reset}"), Level::Info => cformat_args!("{blue}inf{reset}"), }, record.file().unwrap_or(""), record.line().unwrap_or(0), record.args(), ) } } } fn flush(&self) {} }