1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use {
log::{Level, LevelFilter, Log, Metadata, Record},
xen::{console::Writer, println},
};
static LOGGER: Logger = Logger;
pub fn init() {
log::set_logger(&LOGGER)
.map(|()| log::set_max_level(LevelFilter::Trace))
.expect("Failed to set logger");
}
struct Logger;
impl Log for Logger {
fn enabled(&self, _: &Metadata) -> bool {
true
}
fn log(&self, record: &Record) {
println!("{} {}", format_level(record.level()), record.args());
}
fn flush(&self) {
Writer::flush();
}
}
fn format_level(level: Level) -> &'static str {
match level {
Level::Trace => "\x1b[0;35mTRACE\x1b[0m",
Level::Debug => "\x1b[0;34mDEBUG\x1b[0m",
Level::Info => "\x1b[0;32mINFO \x1b[0m",
Level::Warn => "\x1b[0;33mWARN \x1b[0m",
Level::Error => "\x1b[0;31mERROR\x1b[0m",
}
}