Skip to main content

ferrum_cli/
utils.rs

1//! CLI utility functions
2
3use ferrum_types::Result;
4use std::io;
5use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter};
6
7/// Setup logging based on verbosity level
8pub fn setup_logging(verbose: bool, quiet: bool) -> Result<()> {
9    let log_level = if quiet {
10        tracing::Level::ERROR
11    } else if verbose {
12        tracing::Level::DEBUG
13    } else {
14        tracing::Level::WARN
15    };
16
17    // Build filter: suppress noisy warnings unless verbose
18    let filter = if verbose {
19        EnvFilter::new(log_level.to_string())
20    } else {
21        EnvFilter::try_from_default_env().unwrap_or_else(|_| {
22            EnvFilter::new(format!(
23                "{},ferrum_engine::metal::metal_executor=error,tokenizers=error",
24                log_level
25            ))
26        })
27    };
28
29    tracing_subscriber::registry()
30        .with(filter)
31        .with(tracing_subscriber::fmt::layer().with_writer(io::stderr))
32        .init();
33
34    Ok(())
35}