use std::time::SystemTime;
use log::{LevelFilter, Log};
struct Logger {
level_filter: LevelFilter,
}
pub fn init(level_filter: LevelFilter) {
log::set_max_level(level_filter);
log::set_boxed_logger(Box::new(Logger { level_filter })).unwrap();
}
impl Log for Logger {
fn enabled(&self, metadata: &log::Metadata) -> bool {
metadata.level() <= self.level_filter
}
fn log(&self, record: &log::Record) {
let timestamp = SystemTime::UNIX_EPOCH.elapsed().unwrap().as_secs();
let level = record.level().as_str();
let target = record.target();
let args = record.args();
eprintln!("[{timestamp} {level} {target}] {args}");
}
fn flush(&self) {}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn minimal() {
init(LevelFilter::Trace);
log::trace!("trace");
log::debug!("debug");
log::info!("info");
log::warn!("warn");
log::error!("error");
}
}