use anyhow::*;
use simplelog::*;
#[derive(clap::ArgEnum, Debug, Copy, Clone)]
pub enum Color {
Auto,
Always,
Never,
}
pub fn init_logger(verbosity: u8, color: Color) {
let mut builder = ConfigBuilder::new();
builder.set_location_level(LevelFilter::Trace);
builder.set_target_level(LevelFilter::Off);
builder.set_thread_level(LevelFilter::Off);
builder.set_time_level(LevelFilter::Off);
let level = match verbosity {
0 => LevelFilter::Warn,
1 => LevelFilter::Info,
2 => LevelFilter::Debug,
_ => LevelFilter::Trace,
};
let config = builder.build();
let color = match color {
Color::Always => ColorChoice::AlwaysAnsi,
Color::Auto => {
if atty::is(atty::Stream::Stderr) {
ColorChoice::Auto
} else {
ColorChoice::Never
}
}
Color::Never => ColorChoice::Never,
};
TermLogger::init(level, config.clone(), TerminalMode::Stderr, color)
.or_else(|_| SimpleLogger::init(level, config))
.context("Couldn't init logger")
.unwrap()
}