use std::path::Path;
use std::sync::Mutex;
use tracing::level_filters::LevelFilter;
use tracing_subscriber::EnvFilter;
pub fn init(verbose: u8, quiet: bool) {
tracing_subscriber::fmt()
.with_writer(anstream::stderr)
.with_env_filter(env_filter(verbose, quiet))
.init();
}
pub fn init_file(verbose: u8, quiet: bool, path: &Path) -> std::io::Result<()> {
let file = std::fs::File::options()
.create(true)
.append(true)
.open(path)?;
tracing_subscriber::fmt()
.with_writer(Mutex::new(file))
.with_ansi(false)
.with_env_filter(env_filter(verbose, quiet))
.init();
Ok(())
}
fn env_filter(verbose: u8, quiet: bool) -> EnvFilter {
let default_level = if quiet {
LevelFilter::ERROR
} else {
match verbose {
0 => LevelFilter::WARN,
1 => LevelFilter::INFO,
2 => LevelFilter::DEBUG,
_ => LevelFilter::TRACE,
}
};
EnvFilter::builder()
.with_default_directive(default_level.into())
.from_env_lossy()
}