moq_native/
log.rs

1use clap::Parser;
2use tracing::level_filters::LevelFilter;
3use tracing_subscriber::EnvFilter;
4
5#[derive(Parser, Clone, Default)]
6pub struct Args {
7	#[arg(long, short, action = clap::ArgAction::Count)]
8	pub verbose: u8,
9
10	#[arg(long, short, action = clap::ArgAction::Count, conflicts_with = "verbose")]
11	pub quiet: u8,
12}
13
14impl Args {
15	pub fn level(&self) -> LevelFilter {
16		// Default to INFO, go up or down based on -q or -v counts
17		match self.verbose {
18			0 => match self.quiet {
19				0 => LevelFilter::INFO,
20				1 => LevelFilter::ERROR,
21				_ => LevelFilter::OFF,
22			},
23			1 => LevelFilter::DEBUG,
24			_ => LevelFilter::TRACE,
25		}
26	}
27
28	pub fn init(&self) {
29		let filter = EnvFilter::builder()
30			.with_default_directive(self.level().into()) // Default to our -q/-v args
31			.from_env_lossy() // Allow overriding with RUST_LOG
32			.add_directive("h2=warn".parse().unwrap())
33			.add_directive("quinn=info".parse().unwrap())
34			.add_directive("tracing::span=off".parse().unwrap())
35			.add_directive("tracing::span::active=off".parse().unwrap());
36
37		let logger = tracing_subscriber::FmtSubscriber::builder()
38			.with_writer(std::io::stderr)
39			.with_env_filter(filter)
40			.finish();
41
42		tracing::subscriber::set_global_default(logger).unwrap();
43	}
44}