// TODO: Add a logger api with logger levels and various outputs use log::{Level, SetLoggerError}; pub fn init() -> Result<(), SetLoggerError> { log::set_logger(&crate::logger::Logger)?; log::set_max_level(log::LevelFilter::Trace); Ok(()) } struct Logger; impl log::Log for Logger { fn enabled(&self, _metadata: &log::Metadata) -> bool { true } fn log(&self, record: &log::Record) { let lvl = record.level(); let lvl_color = match lvl { Level::Error => "160", Level::Warn => "172", Level::Info => "47", Level::Debug => "25", Level::Trace => "103", }; let module = record.module_path().unwrap_or_default(); let line = record.line().unwrap_or_default(); crate::arch::log(format_args!( "\x1b[38;5;{lvl_color}m{lvl}\x1b[0m [{module}:{line}]: {}\r\n", record.args(), )) .expect("write to serial console"); } fn flush(&self) {} }