strat9_kernel/boot/
logger.rs1use log::{Level, LevelFilter, Metadata, Record};
2
3struct SerialLogger;
5
6static LOGGER: SerialLogger = SerialLogger;
7
8impl log::Log for SerialLogger {
9 fn enabled(&self, metadata: &Metadata) -> bool {
11 metadata.level() <= Level::Trace
12 }
13
14 fn log(&self, record: &Record) {
16 if self.enabled(record.metadata()) {
17 let (level_str, msg_color) = match record.level() {
18 Level::Error => ("\x1b[31mERROR\x1b[0m", "\x1b[31m"),
19 Level::Warn => ("\x1b[33mWARN\x1b[0m", "\x1b[33m"),
20 Level::Info => ("\x1b[32mINFO\x1b[0m", "\x1b[37m"),
21 Level::Debug => ("\x1b[90mDEBUG\x1b[0m", "\x1b[90m"),
22 Level::Trace => ("\x1b[90mTRACE\x1b[0m", "\x1b[90m"),
23 };
24
25 crate::arch::x86_64::serial::_print(format_args!(
26 "[{}] {}{}\x1b[0m\n",
27 level_str,
28 msg_color,
29 record.args()
30 ));
31 }
32 }
33
34 fn flush(&self) {}
36}
37
38pub fn init() {
40 log::set_logger(&LOGGER)
41 .map(|()| log::set_max_level(LevelFilter::Trace))
42 .expect("Failed to set logger");
43}