use chrono::Local;
use colored::*;
use env_logger::Builder;
use log::LevelFilter;
use std::env;
use std::io::Write;
pub fn setup_logging(verbose: bool, quiet: bool) -> Result<(), Box<dyn std::error::Error>> {
let log_level: LevelFilter = if quiet {
LevelFilter::Off
} else if verbose {
LevelFilter::Debug
} else {
env::var("RUST_LOG")
.unwrap_or_else(|_| "info".to_string())
.parse()?
};
Builder::new()
.filter(None, log_level)
.format(|buf, record| {
let level = match record.level() {
log::Level::Error => "ERROR".red(),
log::Level::Warn => "WARN".yellow(),
log::Level::Info => "INFO".green(),
log::Level::Debug => "DEBUG".blue(),
log::Level::Trace => "TRACE".purple(),
};
writeln!(
buf,
"{} [{}] - {}",
Local::now().format("%Y-%m-%d %H:%M:%S"),
level,
record.args()
)
})
.init();
Ok(())
}