use log::kv::{Key, Value, VisitSource};
use std::io;
struct KvsVisitor<'a> {
buf: &'a mut env_logger::fmt::Formatter,
}
impl<'a, 'kvs> VisitSource<'kvs> for KvsVisitor<'a> {
fn visit_pair(&mut self, k: Key<'kvs>, v: Value<'kvs>) -> Result<(), log::kv::Error> {
use std::io::Write;
write!(self.buf, " {}={}", k, v).map_err(|e| log::kv::Error::from(e))
}
}
pub fn init(verbose: u8) {
env_logger::builder()
.filter_level(match verbose {
0 => log::LevelFilter::Off,
1 => log::LevelFilter::Error,
2 => log::LevelFilter::Warn,
3 => log::LevelFilter::Info,
4 => log::LevelFilter::Debug,
_ => log::LevelFilter::Trace,
})
.format_key_values(|mut buf, rec| {
let mut visitor = KvsVisitor { buf: &mut buf };
rec.visit(&mut visitor).map_err(|err| io::Error::other(err))
})
.format_timestamp(None)
.init();
}