proka_kernel/libs/
logger.rs1use crate::println;
2use log::{Log, Metadata, Record};
3
4pub struct KernelLogger;
6
7impl Log for KernelLogger {
8 fn enabled(&self, _metadata: &Metadata) -> bool {
9 true
10 }
11
12 fn log(&self, record: &Record) {
13 if self.enabled(record.metadata()) {
14 let level = record.level();
15
16 let color = match record.level() {
17 log::Level::Error => "\x1b[31m",
18 log::Level::Warn => "\x1b[33m",
19 log::Level::Info => "\x1b[37m",
20 log::Level::Debug => "\x1b[34m",
21 log::Level::Trace => "\x1b[35m",
22 };
23
24 println!("{}[{}] {}\x1b[0m", color, level, record.args());
25 }
26 }
27
28 fn flush(&self) {}
29}
30
31#[macro_export]
32macro_rules! success {
33 ($($arg:tt)*) => {
34 println!("\x1b[32m[SUCCESS] {}\x1b[0m", format_args!($($arg)*))
35 };
36}
37
38pub fn init_logger() {
40 static LOGGER: KernelLogger = KernelLogger;
41 log::set_logger(&LOGGER).expect("Failed to set logger");
42 match crate::config::LOG_LEVEL {
43 "Trace" => log::set_max_level(log::LevelFilter::Trace),
44 "Debug" => log::set_max_level(log::LevelFilter::Debug),
45 "Info" => log::set_max_level(log::LevelFilter::Info),
46 "Warn" => log::set_max_level(log::LevelFilter::Warn),
47 "Error" => log::set_max_level(log::LevelFilter::Error),
48 &_ => {}
49 }
50}