Skip to content

Commit

Permalink
Fix log level selection
Browse files Browse the repository at this point in the history
In #176  I wanted to allow
RUST_LOG overriding the config file, but it also made the config file be always ignored
when file logging was enabled
  • Loading branch information
sosthene-nitrokey committed Jan 25, 2024
1 parent 92f196c commit 56358b2
Showing 1 changed file with 25 additions and 13 deletions.
38 changes: 25 additions & 13 deletions pkcs11/src/config/logging.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use std::env;
use std::path::PathBuf;

use log::{info, warn, LevelFilter};
Expand Down Expand Up @@ -162,8 +163,13 @@ pub fn configure_logger(config: &Result<(P11Config, Vec<PathBuf>), 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());

Expand All @@ -190,23 +196,29 @@ pub fn configure_logger(config: &Result<(P11Config, Vec<PathBuf>), 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());

Check warning on line 204 in pkcs11/src/config/logging.rs

View check run for this annotation

Codecov / codecov/patch

pkcs11/src/config/logging.rs#L204

Added line #L204 was not covered by tests
}
(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);

Check warning on line 208 in pkcs11/src/config/logging.rs

View check run for this annotation

Codecov / codecov/patch

pkcs11/src/config/logging.rs#L208

Added line #L208 was not covered by tests
}
(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,
Expand Down

0 comments on commit 56358b2

Please sign in to comment.