zvault/src/cli/logger.rs

54 lines
1.5 KiB
Rust
Raw Normal View History

2018-02-19 22:31:58 +00:00
use log;
2017-03-17 10:03:07 +00:00
pub use log::SetLoggerError;
2017-03-18 16:22:11 +00:00
use ansi_term::{Color, Style};
use std::io::Write;
2017-03-18 16:22:11 +00:00
macro_rules! println_stderr(
($($arg:tt)*) => { {
let r = writeln!(&mut ::std::io::stderr(), $($arg)*);
r.expect("failed printing to stderr");
} }
);
2018-02-19 22:31:58 +00:00
struct Logger(log::Level);
2017-03-17 10:03:07 +00:00
impl log::Log for Logger {
2018-02-19 22:31:58 +00:00
fn enabled(&self, metadata: &log::Metadata) -> bool {
2017-04-09 10:04:28 +00:00
metadata.level() <= self.0
2017-03-17 10:03:07 +00:00
}
2018-02-19 22:31:58 +00:00
fn flush(&self) {}
fn log(&self, record: &log::Record) {
2017-03-17 10:03:07 +00:00
if self.enabled(record.metadata()) {
2017-04-09 10:04:28 +00:00
match record.level() {
2018-02-19 22:31:58 +00:00
log::Level::Error => {
2017-07-21 09:21:59 +00:00
println_stderr!("{}: {}", Color::Red.bold().paint("error"), record.args())
}
2018-02-19 22:31:58 +00:00
log::Level::Warn => {
2017-07-21 09:21:59 +00:00
println_stderr!(
"{}: {}",
Color::Yellow.bold().paint("warning"),
record.args()
)
}
2018-02-19 22:31:58 +00:00
log::Level::Info => {
2017-07-21 09:21:59 +00:00
println_stderr!("{}: {}", Color::Green.bold().paint("info"), record.args())
}
2018-02-19 22:31:58 +00:00
log::Level::Debug => {
2017-07-21 09:21:59 +00:00
println_stderr!("{}: {}", Style::new().bold().paint("debug"), record.args())
}
2018-02-19 22:31:58 +00:00
log::Level::Trace => println_stderr!("{}: {}", "trace", record.args()),
2017-03-18 16:22:11 +00:00
}
2017-03-17 10:03:07 +00:00
}
}
}
2018-02-19 22:31:58 +00:00
pub fn init(level: log::Level) -> Result<(), SetLoggerError> {
let logger = Logger(level);
log::set_max_level(level.to_level_filter());
log::set_boxed_logger(Box::new(logger))
2017-03-17 10:03:07 +00:00
}