use localtime::LocalTime;
use log::*;
pub struct Logger {
level: Level,
}
impl Logger {
pub fn new(level: Level) -> Self {
Self { level }
}
}
impl Log for Logger {
fn enabled(&self, metadata: &Metadata) -> bool {
metadata.level() <= self.level
}
fn log(&self, record: &Record) {
use colored::Colorize;
let time = LocalTime::now().as_secs();
match record.target() {
"test" => {
println!(
"{time} {} {}",
"test:".cyan(),
record.args().to_string().cyan()
)
}
"sim" => {
println!(
"{time} {} {}",
"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) {}
}