cli_xtask/
logger.rs

1//! Utility functions for logging.
2
3use std::{env, io};
4
5use eyre::eyre;
6use tracing::Level;
7use tracing_subscriber::EnvFilter;
8
9use crate::Result;
10
11/// Install a `tracing-subscriber` as a logger.
12pub fn install(verbosity: Option<Level>) -> Result<()> {
13    if env::var_os("RUST_LOG").is_none() {
14        match verbosity {
15            Some(Level::ERROR) => env::set_var("RUST_LOG", "error"),
16            Some(Level::WARN) => env::set_var("RUST_LOG", "warn"),
17            Some(Level::INFO) => env::set_var("RUST_LOG", "info"),
18            Some(Level::DEBUG) => env::set_var("RUST_LOG", "debug"),
19            Some(Level::TRACE) => env::set_var("RUST_LOG", "trace"),
20            None => env::set_var("RUST_LOG", "off"),
21        }
22    }
23
24    tracing_subscriber::fmt()
25        .with_env_filter(EnvFilter::from_default_env())
26        .with_writer(io::stderr)
27        .with_target(false)
28        .try_init()
29        .map_err(|e| eyre!(e))?;
30
31    Ok(())
32}