diff --git a/notes.md b/notes.md index a131fa0..05f53b6 100644 --- a/notes.md +++ b/notes.md @@ -48,7 +48,6 @@ - cli functions - "continue" and "new" flags to avoid user interaction - "quiet" flag to disable output entirely - - "verbose" flag to adjust RUST_LOG for `shrupl` crate - some switch to change log to "pretty-print" - client error rework diff --git a/src/cli.rs b/src/cli.rs index 9117d38..5d56f5e 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -11,6 +11,7 @@ use clap::{ builder::{PossibleValuesParser, TypedValueParser}, value_parser, }; +use log::LevelFilter; use crate::{ file::Checked, @@ -60,6 +61,10 @@ pub struct Cli { )] pub chunk_size: usize, + /// Increase output verbosity + #[arg(short, long, action = clap::ArgAction::Count)] + verbose: u8, + /// Base URL for Sharry Instance url: String, @@ -81,6 +86,7 @@ impl fmt::Debug for Cli { .field("chunk_size", &self.chunk_size) .field("share_request", &self.get_share_request()) .field("files", &self.files) + .field("level_filter", &self.get_level_filter()) .field("hash", &self.get_hash()) .finish_non_exhaustive() } @@ -114,6 +120,16 @@ impl Cli { NewShareRequest::new(&self.name, self.description.as_ref(), self.max_views) } + pub fn get_level_filter(&self) -> LevelFilter { + match self.verbose { + 0 => LevelFilter::Error, + 1 => LevelFilter::Warn, + 2 => LevelFilter::Info, + 3 => LevelFilter::Debug, + _ => LevelFilter::Trace, + } + } + pub fn get_hash(&self) -> String { let file_refs = { let mut refs: Vec<_> = self.files.iter().collect(); diff --git a/src/main.rs b/src/main.rs index 8925510..7332baf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -23,8 +23,6 @@ use cli::Cli; use output::{Log, SHRUPL, prompt_continue}; fn main() { - env_logger::init(); - let check_ctrlc = { let stop = Arc::new(AtomicBool::new(false)); let stop_ctrlc = stop.clone(); @@ -43,6 +41,12 @@ fn main() { }; let args = Cli::parse(); + + env_logger::Builder::new() + .filter_module("shrupl", args.get_level_filter()) + .parse_default_env() + .init(); + info!("args: {args:#?}"); println!("{} to {}!", style("Welcome").magenta().bold(), *SHRUPL);