Skip to content
Snippets Groups Projects
Commit a5ec3841 authored by Eduardo Trujillo's avatar Eduardo Trujillo
Browse files

Merge branch 'verbosity' into 'master'

Add support for configuring the verbosity of the logger from CLI opts

See merge request !1
parents 9cac6562 1ef021fe
No related branches found
No related tags found
1 merge request!1Add support for configuring the verbosity of the logger from CLI opts
Pipeline #127 passed
use std::path::PathBuf; use std::path::PathBuf;
use clap::{Clap, IntoApp}; use clap::{Clap, IntoApp};
use log::LevelFilter;
use serde::de::DeserializeOwned; use serde::de::DeserializeOwned;
use thiserror::Error; use thiserror::Error;
...@@ -16,9 +17,31 @@ pub enum CliError { ...@@ -16,9 +17,31 @@ pub enum CliError {
pub trait AppOpts: Clap { pub trait AppOpts: Clap {
fn try_init() -> Result<Self, CliError> { fn try_init() -> Result<Self, CliError> {
pretty_env_logger::init(); let result = Self::try_parse().map_err(CliError::ArgParse);
Self::try_parse().map_err(CliError::ArgParse) match &result {
Ok(result) => {
try_init_pretty_logger(
result.get_log_environment_variable_name(),
result.get_log_level_filter(),
)
.unwrap();
}
Err(_) => {
// Initialize the logger with defaults.
pretty_env_logger::init();
}
}
result
}
fn get_log_level_filter(&self) -> Option<LevelFilter> {
None
}
fn get_log_environment_variable_name(&self) -> Option<&str> {
None
} }
} }
...@@ -36,3 +59,20 @@ pub trait ConfigurableAppOpts<C: DeserializeOwned>: AppOpts { ...@@ -36,3 +59,20 @@ pub trait ConfigurableAppOpts<C: DeserializeOwned>: AppOpts {
fn get_additional_config_paths(&self) -> Vec<PathBuf>; fn get_additional_config_paths(&self) -> Vec<PathBuf>;
} }
fn try_init_pretty_logger(
environment_variable_name: Option<&str>,
level_filter_override: Option<LevelFilter>,
) -> Result<(), log::SetLoggerError> {
let mut builder = pretty_env_logger::formatted_builder();
if let Some(level_filter_override) = level_filter_override {
builder.filter(None, level_filter_override);
}
if let Ok(s) = ::std::env::var(environment_variable_name.unwrap_or("RUST_LOG")) {
builder.parse_filters(&s);
}
builder.try_init()
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment