59 lines
1.7 KiB
Rust
59 lines
1.7 KiB
Rust
use localtime::LocalTime;
|
|
use log::*;
|
|
|
|
struct Logger {
|
|
level: Level,
|
|
}
|
|
|
|
impl Log for Logger {
|
|
fn enabled(&self, metadata: &Metadata) -> bool {
|
|
metadata.level() <= self.level
|
|
}
|
|
|
|
fn log(&self, record: &Record) {
|
|
use colored::Colorize;
|
|
|
|
match record.target() {
|
|
"test" => {
|
|
println!("{} {}", "test:".cyan(), record.args().to_string().cyan())
|
|
}
|
|
"sim" => {
|
|
println!("{} {}", "sim:".bold(), record.args().to_string().bold())
|
|
}
|
|
target => {
|
|
if self.enabled(record.metadata()) {
|
|
let current = std::thread::current();
|
|
let msg = format!("{:>10} {}", format!("{target}:"), record.args());
|
|
let time = LocalTime::now().as_secs();
|
|
let s = if let Some(name) = current.name() {
|
|
format!("{time} {name:<16} {msg}")
|
|
} else {
|
|
format!("{time} {msg}")
|
|
};
|
|
match record.level() {
|
|
log::Level::Warn => {
|
|
println!("{}", s.yellow());
|
|
}
|
|
log::Level::Error => {
|
|
println!("{}", s.red());
|
|
}
|
|
_ => {
|
|
println!("{}", s.dimmed());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
fn flush(&self) {}
|
|
}
|
|
|
|
#[allow(dead_code)]
|
|
pub fn init(level: Level) {
|
|
let logger = Logger { level };
|
|
|
|
log::set_boxed_logger(Box::new(logger)).ok();
|
|
log::set_max_level(level.to_level_filter());
|
|
}
|