ch1-exp: Log and color output
This commit is contained in:
parent
3681c27870
commit
a5140c2cba
4 changed files with 59 additions and 3 deletions
7
Cargo.lock
generated
7
Cargo.lock
generated
|
@ -2,10 +2,17 @@
|
||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 3
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "log"
|
||||||
|
version = "0.4.22"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "os"
|
name = "os"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"log",
|
||||||
"sbi-rt",
|
"sbi-rt",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -4,4 +4,5 @@ version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
log = "0.4.22"
|
||||||
sbi-rt = "0.0.3"
|
sbi-rt = "0.0.3"
|
||||||
|
|
42
src/logger.rs
Normal file
42
src/logger.rs
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
use log::{Level, LevelFilter, Log};
|
||||||
|
|
||||||
|
use crate::println;
|
||||||
|
|
||||||
|
struct Logger;
|
||||||
|
|
||||||
|
impl Log for Logger {
|
||||||
|
fn enabled(&self, _metadata: &log::Metadata) -> bool {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
fn log(&self, record: &log::Record) {
|
||||||
|
if !self.enabled(record.metadata()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let (color, level) = match record.level() {
|
||||||
|
Level::Error => (31, "ERR"),
|
||||||
|
Level::Warn => (93, "WRN"),
|
||||||
|
Level::Info => (34, "INF"),
|
||||||
|
Level::Debug => (32, "DBG"),
|
||||||
|
Level::Trace => (90, "TRC"),
|
||||||
|
};
|
||||||
|
|
||||||
|
println!("\x1b[{}m{}\x1b[0m \x1b[1m{}\x1b[0m {}", color, level, record.target(), record.args());
|
||||||
|
}
|
||||||
|
|
||||||
|
fn flush(&self) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn init() {
|
||||||
|
static LOGGER: Logger = Logger;
|
||||||
|
log::set_logger(&LOGGER).unwrap();
|
||||||
|
log::set_max_level(match option_env!("LOG") {
|
||||||
|
Some("ERROR") => LevelFilter::Error,
|
||||||
|
Some("WARN") => LevelFilter::Warn,
|
||||||
|
Some("INFO") => LevelFilter::Info,
|
||||||
|
Some("DEBUG") => LevelFilter::Debug,
|
||||||
|
Some("TRACE") => LevelFilter::Trace,
|
||||||
|
_ => LevelFilter::Off,
|
||||||
|
});
|
||||||
|
}
|
12
src/main.rs
12
src/main.rs
|
@ -3,24 +3,30 @@
|
||||||
|
|
||||||
mod lang_items;
|
mod lang_items;
|
||||||
mod sbi;
|
mod sbi;
|
||||||
|
mod logger;
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
mod console;
|
mod console;
|
||||||
|
|
||||||
use core::arch::global_asm;
|
use core::arch::global_asm;
|
||||||
|
use log::{debug, error, info, trace, warn};
|
||||||
|
|
||||||
global_asm!(include_str!("entry.asm"));
|
global_asm!(include_str!("entry.asm"));
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub fn rust_main() -> ! {
|
pub fn rust_main() -> ! {
|
||||||
clear_bss();
|
clear_bss();
|
||||||
|
logger::init();
|
||||||
|
|
||||||
sbi::console_write_byte('O' as u8);
|
sbi::console_write_byte('O' as u8);
|
||||||
sbi::console_write_byte('K' as u8);
|
sbi::console_write_byte('K' as u8);
|
||||||
sbi::console_write_byte('\n' as u8);
|
sbi::console_write_byte('\n' as u8);
|
||||||
|
|
||||||
sbi::console_write("Hello World.\n".as_bytes());
|
trace!("Hello World.");
|
||||||
|
debug!("Hello World.");
|
||||||
println!("hello world from macro");
|
info!("Hello World.");
|
||||||
|
warn!("Hello World.");
|
||||||
|
error!("Hello World.");
|
||||||
|
|
||||||
panic!("Shutdown machine!");
|
panic!("Shutdown machine!");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue