libs:logging: Fix logger

PR #8311 inadvertently broke the logging since no log messages below the
`Info` level are logged now, regardless of the requested log level.

Resolve the issue by storing the requested log level in the
`RuntimeComponentLevelFilter` and using that level in the `log()`
function, rather than hard-coding `Info` as the default where no entry
is found in the `FILTER_RULE` hashmap.

Fixes: #8546.

Signed-off-by: James O. D. Hunt <james.o.hunt@intel.com>
This commit is contained in:
James O. D. Hunt 2023-12-01 12:21:20 +00:00
parent 818b8f93b1
commit f9f1d3a071

View File

@ -68,7 +68,7 @@ pub fn create_term_logger(level: slog::Level) -> (slog::Logger, slog_async::Asyn
});
// Allow runtime filtering of records by log level
let filter_drain = RuntimeComponentLevelFilter::new(unique_drain).fuse();
let filter_drain = RuntimeComponentLevelFilter::new(unique_drain, level).fuse();
// Ensure the logger is thread-safe
let (async_drain, guard) = slog_async::Async::new(filter_drain)
@ -112,7 +112,7 @@ where
});
// Allow runtime filtering of records by log level
let filter_drain = RuntimeComponentLevelFilter::new(unique_drain).fuse();
let filter_drain = RuntimeComponentLevelFilter::new(unique_drain, level).fuse();
// Ensure the logger is thread-safe
let (async_drain, guard) = slog_async::Async::new(filter_drain)
@ -283,11 +283,12 @@ where
// specified in the struct according to the component it belongs to.
struct RuntimeComponentLevelFilter<D> {
drain: D,
log_level: slog::Level,
}
impl<D> RuntimeComponentLevelFilter<D> {
fn new(drain: D) -> Self {
RuntimeComponentLevelFilter { drain }
fn new(drain: D, log_level: slog::Level) -> Self {
RuntimeComponentLevelFilter { drain, log_level }
}
}
@ -329,7 +330,7 @@ where
}
let according_level = component_level_config
.get(&component.unwrap_or(DEFAULT_SUBSYSTEM.to_string()))
.unwrap_or(&slog::Level::Info);
.unwrap_or(&self.log_level);
if record.level().is_at_least(*according_level) {
self.drain.log(record, values)?;
}