Skip to content

Commit

Permalink
docs: Add example for setting default log level
Browse files Browse the repository at this point in the history
A new example, `log_level.rs`, demonstrates how to set the default log
level for Verbosity to something other than the default. It can be run
with `cargo run --example=log_level [default level] [flags]`. E.g.,:
`cargo run --example=log_level off -vvvv` will set the default log level
to `OffLevel` and then apply the verbosity flags to set the log level to
`Debug`.
  • Loading branch information
joshka committed Nov 16, 2024
1 parent e628191 commit 2192330
Showing 1 changed file with 67 additions and 0 deletions.
67 changes: 67 additions & 0 deletions examples/log_level.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
//! Demonstrates how to set the default log level for the logger to something other than the default
//! (`ErrorLevel`). This is done with multiple subcommands, each with their own verbosity level.
use clap::{Parser, Subcommand};
use clap_verbosity_flag::{
DebugLevel, ErrorLevel, InfoLevel, OffLevel, TraceLevel, Verbosity, WarnLevel,
};

#[derive(Debug, Parser)]
struct Cli {
#[command(subcommand)]
command: Command,
}

#[derive(Debug, Subcommand)]
enum Command {
Off {
#[command(flatten)]
verbose: Verbosity<OffLevel>,
},
Error {
#[command(flatten)]
verbose: Verbosity<ErrorLevel>,
},
Warn {
#[command(flatten)]
verbose: Verbosity<WarnLevel>,
},
Info {
#[command(flatten)]
verbose: Verbosity<InfoLevel>,
},
Debug {
#[command(flatten)]
verbose: Verbosity<DebugLevel>,
},
Trace {
#[command(flatten)]
verbose: Verbosity<TraceLevel>,
},
}

impl Command {
fn log_level_filter(&self) -> log::LevelFilter {
match self {
Command::Off { verbose } => verbose.log_level_filter(),
Command::Error { verbose } => verbose.log_level_filter(),
Command::Warn { verbose } => verbose.log_level_filter(),
Command::Info { verbose } => verbose.log_level_filter(),
Command::Debug { verbose } => verbose.log_level_filter(),
Command::Trace { verbose } => verbose.log_level_filter(),
}
}
}

fn main() {
let cli = Cli::parse();
env_logger::Builder::new()
.filter_level(cli.command.log_level_filter())
.init();

log::error!("Engines exploded");
log::warn!("Engines smoking");
log::info!("Engines exist");
log::debug!("Engine temperature is 200 degrees");
log::trace!("Engine subsection is 300 degrees");
}

0 comments on commit 2192330

Please sign in to comment.