diff --git a/pkcs11/src/config/logging.rs b/pkcs11/src/config/logging.rs index bf40449a..53428f5d 100644 --- a/pkcs11/src/config/logging.rs +++ b/pkcs11/src/config/logging.rs @@ -1,3 +1,4 @@ +use std::env; use std::path::PathBuf; use log::{info, warn, LevelFilter}; @@ -162,8 +163,13 @@ pub fn configure_logger(config: &Result<(P11Config, Vec), Initializatio } } + let mut log_level: LevelFilter = config + .log_level + .map(Into::into) + .unwrap_or_else(log::max_level); + if use_file { - let mut builder = env_logger::Builder::from_default_env(); + let mut builder = env_logger::Builder::new(); let path = &config.log_file.as_deref().unwrap_or("-".as_ref()); @@ -190,23 +196,29 @@ pub fn configure_logger(config: &Result<(P11Config, Vec), Initializatio }; } - env_logger = Some(builder.build()); - } - - // RUST_LOG must override the default filter - match (env_logger.as_ref(), config.log_level.as_ref()) { - (Some(logger), Some(config_filter)) => { - log::set_max_level(logger.filter().min(LevelFilter::from(*config_filter))); + let mut override_filter = false; + if let Ok(filters) = env::var("RUST_LOG") { + builder.parse_filters(&filters); + override_filter = true; + } else if let Some(filter) = config.log_level { + builder.filter_level(filter.into()); } - (Some(logger), _) if logger.filter() > LevelFilter::Error => { - log::set_max_level(logger.filter()); + + if let Ok(format) = env::var("RUST_LOG_STYLE") { + builder.parse_write_style(&format); } - (None, Some(level)) => { - log::set_max_level((*level).into()); + + let tmp = builder.build(); + + if override_filter { + log_level = tmp.filter(); } - _ => {} + + env_logger = Some(tmp); } + log::set_max_level(log_level); + log::set_boxed_logger(Box::new(MultiLog { syslog_logger, env_logger,