plantuml_server_client_rs/
logger.rs

1use anyhow::{Context as _, Result};
2use tracing_subscriber::EnvFilter;
3
4const ENV_NAME: &str = "PSCR_LOG";
5
6/// Initializes tracing logger
7///
8/// * `level` - A log level. If the `PSCR_LOG` environment variable is given, `PSCR_LOG` is preferred and `level` is ignored.
9///   * 0 - `""`
10///   * 1 - `"info"`
11///   * 2 - `"debug"`
12///   * 3 and more - `"trace"`
13///
14/// releated: [`Args::verbose`][`crate::Args::verbose`]
15pub fn init_logger(level: u8) -> Result<()> {
16    let env_filter = env_filter(level);
17
18    let subscriber = tracing_subscriber::fmt()
19        .compact()
20        .with_writer(std::io::stderr)
21        .with_file(true)
22        .with_line_number(true)
23        .with_thread_ids(true)
24        .with_target(true)
25        .with_env_filter(env_filter)
26        .finish();
27
28    tracing::subscriber::set_global_default(subscriber)
29        .context("tracing::subscriber::set_global_default(): failed")?;
30    Ok(())
31}
32
33fn env_filter(level: u8) -> EnvFilter {
34    let log_level = std::env::var(ENV_NAME).unwrap_or_else(|_| {
35        match level {
36            0 => "warn",
37            1 => "info",
38            2 => "debug",
39            _ => "trace",
40        }
41        .to_string()
42    });
43    EnvFilter::new(log_level)
44}