#![forbid(missing_docs)]
use colored::Colorize;
use log::{Level, Log, Metadata, Record, SetLoggerError};
pub struct Logger {
pub min_level: Level,
pub prog_name: String,
}
impl Logger {
pub fn init(min_level: Level, prog_name: String) -> Result<(), SetLoggerError> {
log::set_max_level(min_level.to_level_filter());
let logger = Logger { min_level, prog_name };
log::set_boxed_logger(Box::new(logger))
}
}
impl Log for Logger {
fn enabled(&self, metadata: &Metadata) -> bool {
metadata.level() <= self.min_level
}
fn log(&self, record: &Record) {
if !self.enabled(record.metadata()) {
return;
}
println!("{}: {}: {}", self.prog_name, match record.level() {
Level::Error => {
"error".red().bold()
}
Level::Warn => {
"warning".bright_purple().bold()
}
Level::Info => {
"info".bright_black().bold()
}
Level::Debug => {
"debug".yellow().bold() }
Level::Trace => {
"trace".white().bold() }
}, record.args().as_str().unwrap().bold());
}
fn flush(&self) {}
}