Skip to content

Commit 3f02a68

Browse files
committed
clean code and open logging
1 parent 36f64c0 commit 3f02a68

File tree

3 files changed

+75
-24
lines changed

3 files changed

+75
-24
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@ tools/
1515
pushall.sh
1616
.vscode/*.log
1717
*.img*
18-
*log*
18+
*.log
1919
/bin

os/src/logging.rs

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
use core::fmt::{self, Write};
2+
3+
use polyhal::debug::DebugConsole;
4+
use log::{self, info, Level, LevelFilter, Log, Metadata, Record};
5+
6+
pub struct Logger;
7+
8+
impl Log for Logger {
9+
fn enabled(&self, _metadata: &Metadata) -> bool {
10+
true
11+
}
12+
13+
fn log(&self, record: &Record) {
14+
if !self.enabled(record.metadata()) {
15+
return;
16+
}
17+
18+
let file = record.file();
19+
let line = record.line();
20+
21+
let color_code = match record.level() {
22+
Level::Error => 31u8, // Red
23+
Level::Warn => 93, // BrightYellow
24+
Level::Info => 34, // Blue
25+
Level::Debug => 32, // Green
26+
Level::Trace => 90, // BrightBlack
27+
};
28+
write!(
29+
Logger,
30+
"\u{1B}[{}m\
31+
[{}] {}:{} {}\
32+
\u{1B}[0m\n",
33+
color_code,
34+
record.level(),
35+
file.unwrap(),
36+
line.unwrap(),
37+
record.args()
38+
)
39+
.expect("can't write color string in logging module.");
40+
}
41+
42+
fn flush(&self) {}
43+
}
44+
45+
impl Write for Logger {
46+
fn write_str(&mut self, s: &str) -> fmt::Result {
47+
let mut buffer = [0u8; 4];
48+
for c in s.chars() {
49+
puts(c.encode_utf8(&mut buffer).as_bytes())
50+
}
51+
Ok(())
52+
}
53+
}
54+
55+
pub fn init(level: Option<&str>) {
56+
log::set_logger(&Logger).unwrap();
57+
log::set_max_level(match level {
58+
Some("error") => LevelFilter::Error,
59+
Some("warn") => LevelFilter::Warn,
60+
Some("info") => LevelFilter::Info,
61+
Some("debug") => LevelFilter::Debug,
62+
Some("trace") => LevelFilter::Trace,
63+
_ => LevelFilter::Off,
64+
});
65+
info!("logging module initialized");
66+
}
67+
68+
#[inline]
69+
pub fn puts(buffer: &[u8]) {
70+
// use the main uart if it exists.
71+
for i in buffer {
72+
DebugConsole::putchar(*i);
73+
}
74+
}

os/src/sbi.rs

Lines changed: 0 additions & 23 deletions
This file was deleted.

0 commit comments

Comments
 (0)