Skip to main content

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    let env_filter = if env::var_os("RUST_LOG").is_some() {
14        EnvFilter::from_default_env()
15    } else {
16        let level = match verbosity {
17            Some(Level::ERROR) => "error",
18            Some(Level::WARN) => "warn",
19            Some(Level::INFO) => "info",
20            Some(Level::DEBUG) => "debug",
21            Some(Level::TRACE) => "trace",
22            None => "off",
23        };
24        EnvFilter::new(level)
25    };
26
27    tracing_subscriber::fmt()
28        .with_env_filter(env_filter)
29        .with_writer(io::stderr)
30        .with_target(false)
31        .try_init()
32        .map_err(|e| eyre!(e))?;
33
34    Ok(())
35}