use colorful::{Color, Colorful};
use log::*;
struct Logger;
static LOGGER: Logger = Logger;
pub fn init(level_filter: LevelFilter) -> Result<(), SetLoggerError> {
log::set_logger(&LOGGER).map(|()| log::set_max_level(level_filter))
}
pub fn init_default() -> Result<(), SetLoggerError> {
init(DEFAULT_LEVEL_FILTER)
}
#[cfg(debug_assertions)]
pub const DEFAULT_LEVEL_FILTER: LevelFilter = LevelFilter::Trace;
#[cfg(not(debug_assertions))]
pub const DEFAULT_LEVEL_FILTER: LevelFilter = LevelFilter::Info;
impl log::Log for Logger {
fn enabled(&self, metadata: &Metadata) -> bool {
metadata.level() <= log::max_level()
}
fn log(&self, record: &Record) {
if !self.enabled(record.metadata()) {
return;
}
let level = record.level();
let color = match level {
Level::Trace => Color::LightGray,
Level::Debug => Color::LightGray,
Level::Info => Color::Blue,
Level::Warn => Color::Yellow,
Level::Error => Color::Red,
};
println!(
"[{}] {} - {}",
level.to_string().color(color),
record.target().split("::").last().unwrap_or("unknown"),
record.args()
);
}
fn flush(&self) {}
}