Skip to main content

azure_pim_cli/
logging.rs

1use anyhow::Result;
2use clap::{ArgAction, Args};
3use std::io::stderr;
4use tracing::Level;
5
6#[derive(Args)]
7#[command(about = None)]
8pub struct Verbosity {
9    /// Increase logging verbosity.  Provide repeatedly to increase the verbosity.
10    #[clap(long, action = ArgAction::Count, global = true)]
11    verbose: u8,
12
13    /// Only show errors
14    #[clap(long, global = true, conflicts_with = "verbose")]
15    quiet: bool,
16}
17
18impl Verbosity {
19    fn get_level(&self) -> Level {
20        if self.quiet {
21            Level::ERROR
22        } else {
23            match self.verbose {
24                0 => Level::INFO,
25                1 => Level::DEBUG,
26                _ => Level::TRACE,
27            }
28        }
29    }
30}
31
32pub fn setup_logging(verbose: &Verbosity) -> Result<()> {
33    let filter = if let Ok(x) = tracing_subscriber::EnvFilter::try_from_default_env() {
34        x
35    } else {
36        tracing_subscriber::EnvFilter::builder().parse(verbose.get_level().as_str())?
37    };
38
39    tracing_subscriber::fmt()
40        .with_env_filter(filter)
41        .with_writer(stderr)
42        .try_init()
43        .ok();
44
45    Ok(())
46}