High-performance implementation of plcbundle written in Rust
at main 44 lines 1.6 kB view raw
1// Logging utilities for CLI 2use std::io::Write; 3 4/// Initialize logger for CLI 5pub fn init_logger(verbose: bool, quiet: bool) { 6 let default_level = if quiet { 7 log::LevelFilter::Error 8 } else if verbose { 9 log::LevelFilter::Info // Verbose = Info level for app, Debug for dependencies via filter 10 } else { 11 log::LevelFilter::Warn 12 }; 13 14 let mut builder = env_logger::Builder::from_default_env(); 15 16 builder.filter_level(default_level).format(|buf, record| { 17 // For verbose/debug output, include level prefix 18 if record.level() <= log::Level::Debug { 19 writeln!(buf, "[{}] {}", record.level(), record.args()) 20 } else { 21 // For info and above, just the message 22 writeln!(buf, "{}", record.args()) 23 } 24 }); 25 26 // When verbose, only show Debug logs from our own crate, not dependencies 27 if verbose { 28 builder.filter_module("plcbundle", log::LevelFilter::Debug); 29 // Suppress noisy debug logs from dependencies 30 builder.filter_module("reqwest", log::LevelFilter::Info); 31 builder.filter_module("hyper", log::LevelFilter::Info); 32 builder.filter_module("h2", log::LevelFilter::Info); 33 builder.filter_module("tokio", log::LevelFilter::Info); 34 } 35 36 // Check if RUST_LOG environment variable is set for override 37 // If user sets RUST_LOG=debug, they get debug from everything 38 if std::env::var("RUST_LOG").is_ok() { 39 // RUST_LOG is set, let env_logger handle it completely 40 return env_logger::init(); 41 } 42 43 builder.init(); 44}