logger: Respect config file log level
- Fixes a bug where the log level set in the config file was ignored: `Logger` and `StderrLogger` captured the level in a `self.level` field at construction time and checked it in `Log::enabled`. After config was loaded, the global `log::set_max_level` was updated but `self.level` was not, so verbose messages were dropped by the per-instance filter even when the global filter allowed them. - Make `log::set_max_level` the single source of truth: remove the `level` field and have `Log::enabled` defer to `log::max_level()` so the two filters can no longer drift. - Update call sites to construct loggers without a level. - Disable the structured logger's internal filter (set to "trace") so that it also falls back to `log::set_max_level`.
This commit is contained in:
parent
9177146794
commit
6b460c4429
|
|
@ -138,7 +138,7 @@ fn main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(lvl) = radicle::logger::env_level() {
|
if let Some(lvl) = radicle::logger::env_level() {
|
||||||
let logger = Box::new(radicle::logger::Logger::new(lvl));
|
let logger = Box::new(radicle::logger::Logger::new());
|
||||||
log::set_boxed_logger(logger).expect("no other logger should have been set already");
|
log::set_boxed_logger(logger).expect("no other logger should have been set already");
|
||||||
log::set_max_level(lvl.to_level_filter());
|
log::set_max_level(lvl.to_level_filter());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -376,7 +376,12 @@ fn initialize_logging(options: &LogOptions) -> Result<(), Box<dyn std::error::Er
|
||||||
LogFormat::Json => json::new_writer(io::stdout()),
|
LogFormat::Json => json::new_writer(io::stdout()),
|
||||||
};
|
};
|
||||||
|
|
||||||
Box::new(Builder::new().with_default_writer(writer).build())
|
// Set to trace (via `Level::max`) and defer to log::set_max_level for filtering
|
||||||
|
Box::new(
|
||||||
|
Builder::with_level(log::Level::max().as_str())
|
||||||
|
.with_default_writer(writer)
|
||||||
|
.build(),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
#[cfg(all(feature = "systemd", target_os = "linux"))]
|
#[cfg(all(feature = "systemd", target_os = "linux"))]
|
||||||
Logger::Systemd => {
|
Logger::Systemd => {
|
||||||
|
|
@ -398,7 +403,7 @@ fn initialize_logging(options: &LogOptions) -> Result<(), Box<dyn std::error::Er
|
||||||
const SYSLOG_IDENTIFIER: &str = "radicle-node";
|
const SYSLOG_IDENTIFIER: &str = "radicle-node";
|
||||||
logger::<&str, &str, _>(SYSLOG_IDENTIFIER.to_string(), []).map_err(Box::new)?
|
logger::<&str, &str, _>(SYSLOG_IDENTIFIER.to_string(), []).map_err(Box::new)?
|
||||||
}
|
}
|
||||||
Logger::Radicle => Box::new(radicle::logger::Logger::new(level)),
|
Logger::Radicle => Box::new(radicle::logger::Logger::new()),
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ fn main() {
|
||||||
let mut args = env::args();
|
let mut args = env::args();
|
||||||
|
|
||||||
if let Some(lvl) = radicle::logger::env_level() {
|
if let Some(lvl) = radicle::logger::env_level() {
|
||||||
let logger = radicle::logger::StderrLogger::new(lvl);
|
let logger = radicle::logger::StderrLogger::new();
|
||||||
log::set_boxed_logger(Box::new(logger))
|
log::set_boxed_logger(Box::new(logger))
|
||||||
.expect("no other logger should have been set already");
|
.expect("no other logger should have been set already");
|
||||||
log::set_max_level(lvl.to_level_filter());
|
log::set_max_level(lvl.to_level_filter());
|
||||||
|
|
|
||||||
|
|
@ -13,19 +13,23 @@ use colored::*;
|
||||||
use log::{Level, Log, Metadata, Record};
|
use log::{Level, Log, Metadata, Record};
|
||||||
|
|
||||||
/// A logger that logs to `stdout`.
|
/// A logger that logs to `stdout`.
|
||||||
pub struct Logger {
|
pub struct Logger;
|
||||||
level: Level,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Logger {
|
impl Logger {
|
||||||
pub fn new(level: Level) -> Self {
|
pub fn new() -> Self {
|
||||||
Self { level }
|
Self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for Logger {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self::new()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Log for Logger {
|
impl Log for Logger {
|
||||||
fn enabled(&self, metadata: &Metadata) -> bool {
|
fn enabled(&self, metadata: &Metadata) -> bool {
|
||||||
metadata.level() <= self.level
|
metadata.level() <= log::max_level()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn log(&self, record: &Record) {
|
fn log(&self, record: &Record) {
|
||||||
|
|
@ -60,19 +64,23 @@ impl Log for Logger {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A logger that logs to `stderr`.
|
/// A logger that logs to `stderr`.
|
||||||
pub struct StderrLogger {
|
pub struct StderrLogger;
|
||||||
level: Level,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl StderrLogger {
|
impl StderrLogger {
|
||||||
pub fn new(level: Level) -> Self {
|
pub fn new() -> Self {
|
||||||
Self { level }
|
Self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for StderrLogger {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self::new()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Log for StderrLogger {
|
impl Log for StderrLogger {
|
||||||
fn enabled(&self, metadata: &Metadata) -> bool {
|
fn enabled(&self, metadata: &Metadata) -> bool {
|
||||||
metadata.level() <= self.level
|
metadata.level() <= log::max_level()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn log(&self, record: &Record) {
|
fn log(&self, record: &Record) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue