From 32024c7ae71d5993bf61adb15cd908eaeade828f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= Date: Thu, 15 Jun 2023 14:44:18 +0200 Subject: [PATCH] Set module level --- src/config.rs | 8 ++++++++ src/loggers/logging.rs | 14 ++++++++++++++ src/loggers/termlog.rs | 4 ++++ src/loggers/testlog.rs | 10 ++++++++++ 4 files changed, 36 insertions(+) diff --git a/src/config.rs b/src/config.rs index e2a0c283..40758cc1 100644 --- a/src/config.rs +++ b/src/config.rs @@ -79,6 +79,7 @@ pub struct Config { pub(crate) target: LevelFilter, pub(crate) target_padding: TargetPadding, pub(crate) location: LevelFilter, + pub(crate) module: LevelFilter, pub(crate) time_format: TimeFormat, pub(crate) time_offset: UtcOffset, pub(crate) filter_allow: Cow<'static, [Cow<'static, str>]>, @@ -149,6 +150,12 @@ impl ConfigBuilder { self } + /// Set at which level and above (more verbose) a module shall be logged (default is Off) + pub fn set_module_level(&mut self, module: LevelFilter) -> &mut ConfigBuilder { + self.0.module = module; + self + } + /// Set how the levels should be padded, when logging (default is Off) pub fn set_level_padding(&mut self, padding: LevelPadding) -> &mut ConfigBuilder { self.0.level_padding = padding; @@ -335,6 +342,7 @@ impl Default for Config { target: LevelFilter::Debug, target_padding: TargetPadding::Off, location: LevelFilter::Trace, + module: LevelFilter::Off, time_format: TimeFormat::Custom(format_description!("[hour]:[minute]:[second]")), time_offset: UtcOffset::UTC, filter_allow: Cow::Borrowed(&[]), diff --git a/src/loggers/logging.rs b/src/loggers/logging.rs index a19d5098..47bc99ff 100644 --- a/src/loggers/logging.rs +++ b/src/loggers/logging.rs @@ -57,6 +57,10 @@ where write_location(record, write)?; } + if config.module <= record.level() && config.module != LevelFilter::Off { + write_module(record, write)?; + } + #[cfg(feature = "paris")] return write_args(record, write, config.enable_paris_formatting); #[cfg(not(feature = "paris"))] @@ -167,6 +171,16 @@ where Ok(()) } +#[inline(always)] +pub fn write_module(record: &Record<'_>, write: &mut W) -> Result<(), Error> +where + W: Write + Sized, +{ + let module = record.module_path().unwrap_or(""); + write!(write, "[{}] ", module)?; + Ok(()) +} + pub fn write_thread_name(write: &mut W, config: &Config) -> Result<(), Error> where W: Write + Sized, diff --git a/src/loggers/termlog.rs b/src/loggers/termlog.rs index a74d9ac9..1858d235 100644 --- a/src/loggers/termlog.rs +++ b/src/loggers/termlog.rs @@ -171,6 +171,10 @@ impl TermLogger { write_location(record, term_lock)?; } + if self.config.module <= record.level() && self.config.module != LevelFilter::Off { + write_module(record, term_lock)?; + } + #[cfg(feature = "paris")] write_args(record, term_lock, self.config.enable_paris_formatting)?; #[cfg(not(feature = "paris"))] diff --git a/src/loggers/testlog.rs b/src/loggers/testlog.rs index 29660e27..a15f81a7 100644 --- a/src/loggers/testlog.rs +++ b/src/loggers/testlog.rs @@ -124,6 +124,10 @@ pub fn log(config: &Config, record: &Record<'_>) { write_location(record); } + if config.module <= record.level() && config.module != LevelFilter::Off { + write_module(record); + } + write_args(record); } @@ -175,6 +179,12 @@ pub fn write_location(record: &Record<'_>) { } } +#[inline(always)] +pub fn write_module(record: &Record<'_>) { + let module = record.module_path().unwrap_or(""); + print!("[{}] ", module); +} + #[inline(always)] pub fn write_args(record: &Record<'_>) { println!("{}", record.args());