Skip to content

Commit 81f9e8b

Browse files
committed
logging: bugfix #137: Init log module to enable logging macros
1 parent fb2a6a0 commit 81f9e8b

File tree

2 files changed

+55
-4
lines changed

2 files changed

+55
-4
lines changed

os/src/logging.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*!
2+
3+
本模块利用 log crate 为你提供了日志功能,使用方式见 main.rs.
4+
5+
*/
6+
7+
use log::{self, Level, LevelFilter, Log, Metadata, Record};
8+
9+
struct SimpleLogger;
10+
11+
impl Log for SimpleLogger {
12+
fn enabled(&self, _metadata: &Metadata) -> bool {
13+
true
14+
}
15+
fn log(&self, record: &Record) {
16+
if !self.enabled(record.metadata()) {
17+
return;
18+
}
19+
let color = match record.level() {
20+
Level::Error => 31, // Red
21+
Level::Warn => 93, // BrightYellow
22+
Level::Info => 34, // Blue
23+
Level::Debug => 32, // Green
24+
Level::Trace => 90, // BrightBlack
25+
};
26+
println!(
27+
"\u{1B}[{}m[{:>5}] {}\u{1B}[0m",
28+
color,
29+
record.level(),
30+
record.args(),
31+
);
32+
}
33+
fn flush(&self) {}
34+
}
35+
36+
pub fn init() {
37+
static LOGGER: SimpleLogger = SimpleLogger;
38+
log::set_logger(&LOGGER).unwrap();
39+
log::set_max_level(match option_env!("LOG") {
40+
Some("ERROR") => LevelFilter::Error,
41+
Some("WARN") => LevelFilter::Warn,
42+
Some("INFO") => LevelFilter::Info,
43+
Some("DEBUG") => LevelFilter::Debug,
44+
Some("TRACE") => LevelFilter::Trace,
45+
_ => LevelFilter::Info,
46+
});
47+
}

os/src/main.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ extern crate alloc;
1010
#[macro_use]
1111
extern crate bitflags;
1212

13+
use log::*;
14+
1315
#[path = "boards/qemu.rs"]
1416
mod board;
1517

@@ -19,6 +21,7 @@ mod config;
1921
mod drivers;
2022
mod fs;
2123
mod lang_items;
24+
mod logging;
2225
mod mm;
2326
mod net;
2427
mod sbi;
@@ -55,15 +58,16 @@ lazy_static! {
5558
#[no_mangle]
5659
pub fn rust_main() -> ! {
5760
clear_bss();
61+
logging::init();
5862
mm::init();
5963
UART.init();
60-
println!("KERN: init gpu");
64+
info!("KERN: init gpu");
6165
let _gpu = GPU_DEVICE.clone();
62-
println!("KERN: init keyboard");
66+
info!("KERN: init keyboard");
6367
let _keyboard = KEYBOARD_DEVICE.clone();
64-
println!("KERN: init mouse");
68+
info!("KERN: init mouse");
6569
let _mouse = MOUSE_DEVICE.clone();
66-
println!("KERN: init trap");
70+
info!("KERN: init trap");
6771
trap::init();
6872
trap::enable_timer_interrupt();
6973
timer::set_next_trigger();

0 commit comments

Comments
 (0)