forked from
atscan.net/plcbundle-rs
High-performance implementation of plcbundle written in Rust
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}