Skip to main content

proka_kernel/libs/
logger.rs

1use crate::println;
2use log::{Log, Metadata, Record};
3
4/// 自定义日志记录器
5pub 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
38/// 初始化日志系统
39pub 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}