From 879d515aed488205dfd1d028690a63f6bec482ab Mon Sep 17 00:00:00 2001 From: tekjar Date: Sun, 31 Oct 2021 14:35:17 +0530 Subject: [PATCH 1/3] Add target padding --- examples/modulepad.rs | 52 ++++++++++++++++++++++++++++++++++++++++++ src/config.rs | 20 ++++++++++++++++ src/lib.rs | 2 +- src/loggers/logging.rs | 19 ++++++++++++--- src/loggers/termlog.rs | 2 +- 5 files changed, 90 insertions(+), 5 deletions(-) create mode 100644 examples/modulepad.rs diff --git a/examples/modulepad.rs b/examples/modulepad.rs new file mode 100644 index 00000000..6849f233 --- /dev/null +++ b/examples/modulepad.rs @@ -0,0 +1,52 @@ +use log::*; +use simplelog::*; + +mod a { + use log::*; + + pub(crate) fn print(client_id: &str, connection_id: usize) { + info!( + "{:15.15}[I] {:20} id = {}", + client_id, "connect", connection_id + ); + } +} + +mod aaaa { + use log::*; + + pub fn print(client_id: &str, connection_id: usize) { + info!( + "{:15.15}[I] {:20} id = {}", + client_id, "connect", connection_id + ); + } +} + +fn main() { + let mut config = simplelog::ConfigBuilder::new(); + config + .set_time_format("".to_owned()) + .set_location_level(LevelFilter::Off) + .set_target_level(LevelFilter::Error) + .set_target_padding(TargetPadding::Right(15)) + .set_thread_level(LevelFilter::Error) + .set_thread_padding(ThreadPadding::Left(2)) + .set_level_color(Level::Trace, Some(Color::Cyan)) + .set_level_padding(LevelPadding::Right); + + let loggers = TermLogger::new( + LevelFilter::Debug, + config.build(), + TerminalMode::Mixed, + ColorChoice::Always, + ); + CombinedLogger::init(vec![loggers]).unwrap(); + + error!("Bright red error"); + info!("This only appears in the log file"); + debug!("This level is currently not enabled for any logger"); + + a::print("hello", 1); + aaaa::print("world", 10); +} diff --git a/src/config.rs b/src/config.rs index 8e73776e..23ee2e38 100644 --- a/src/config.rs +++ b/src/config.rs @@ -29,6 +29,18 @@ pub enum ThreadPadding { Off, } +#[derive(Debug, Clone, Copy)] +/// Padding to be used for logging the thread id/name +pub enum TargetPadding { + /// Add spaces on the left side, up to usize many + Left(usize), + /// Add spaces on the right side, up to usize many + Right(usize), + /// Do not pad the thread id/name + Off, +} + + #[derive(Debug, Clone, Copy, PartialEq)] /// Mode for logging the thread name or id or both. pub enum ThreadLogMode { @@ -59,6 +71,7 @@ pub struct Config { pub(crate) thread_log_mode: ThreadLogMode, pub(crate) thread_padding: ThreadPadding, pub(crate) target: LevelFilter, + pub(crate) target_padding: TargetPadding, pub(crate) location: LevelFilter, pub(crate) time_format: Cow<'static, str>, pub(crate) time_offset: FixedOffset, @@ -116,6 +129,12 @@ impl ConfigBuilder { self } + /// Set how the thread should be padded + pub fn set_target_padding(&mut self, padding: TargetPadding) -> &mut ConfigBuilder { + self.0.target_padding = padding; + self + } + /// Set at which level and above (more verbose) a source code reference shall be logged (default is Trace) pub fn set_location_level(&mut self, location: LevelFilter) -> &mut ConfigBuilder { self.0.location = location; @@ -256,6 +275,7 @@ impl Default for Config { thread_log_mode: ThreadLogMode::IDs, thread_padding: ThreadPadding::Off, target: LevelFilter::Debug, + target_padding: TargetPadding::Off, location: LevelFilter::Trace, time_format: Cow::Borrowed("%H:%M:%S"), time_offset: FixedOffset::east(0), diff --git a/src/lib.rs b/src/lib.rs index b3fb2248..f019e7e2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -24,7 +24,7 @@ mod config; mod loggers; -pub use self::config::{Config, ConfigBuilder, LevelPadding, ThreadLogMode, ThreadPadding}; +pub use self::config::{Config, ConfigBuilder, LevelPadding, ThreadLogMode, ThreadPadding, TargetPadding}; #[cfg(feature = "test")] pub use self::loggers::TestLogger; pub use self::loggers::{CombinedLogger, SimpleLogger, WriteLogger}; diff --git a/src/loggers/logging.rs b/src/loggers/logging.rs index cb3b9e4b..ce465b31 100644 --- a/src/loggers/logging.rs +++ b/src/loggers/logging.rs @@ -1,3 +1,4 @@ +use crate::config::TargetPadding; use crate::{Config, LevelPadding, ThreadLogMode, ThreadPadding}; use log::{LevelFilter, Record}; use std::io::{Error, Write}; @@ -32,7 +33,7 @@ where } if config.target <= record.level() && config.target != LevelFilter::Off { - write_target(record, write)?; + write_target(record, write, config)?; } if config.location <= record.level() && config.location != LevelFilter::Off { @@ -71,11 +72,23 @@ where } #[inline(always)] -pub fn write_target(record: &Record<'_>, write: &mut W) -> Result<(), Error> +pub fn write_target(record: &Record<'_>, write: &mut W, config: &Config) -> Result<(), Error> where W: Write + Sized, { - write!(write, "{}: ", record.target())?; + // dbg!(&config.target_padding); + match config.target_padding { + TargetPadding::Left(pad) => { + write!(write, "{target:>pad$}: ", pad = pad, target = record.target())?; + } + TargetPadding::Right(pad) => { + write!(write, "{target: { + write!(write, "{}: ", record.target())?; + } + } + Ok(()) } diff --git a/src/loggers/termlog.rs b/src/loggers/termlog.rs index ffc37527..930592e8 100644 --- a/src/loggers/termlog.rs +++ b/src/loggers/termlog.rs @@ -152,7 +152,7 @@ impl TermLogger { } if self.config.target <= record.level() && self.config.target != LevelFilter::Off { - write_target(record, term_lock)?; + write_target(record, term_lock, &self.config)?; } if self.config.location <= record.level() && self.config.location != LevelFilter::Off { From 6658bad96af55975bd04cf23851b23528fd18ac3 Mon Sep 17 00:00:00 2001 From: tekjar Date: Sat, 6 Nov 2021 23:12:11 +0530 Subject: [PATCH 2/3] Cargo fmt --- src/config.rs | 1 - src/lib.rs | 4 +++- src/loggers/logging.rs | 14 ++++++++++++-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/config.rs b/src/config.rs index 23ee2e38..97281ec4 100644 --- a/src/config.rs +++ b/src/config.rs @@ -40,7 +40,6 @@ pub enum TargetPadding { Off, } - #[derive(Debug, Clone, Copy, PartialEq)] /// Mode for logging the thread name or id or both. pub enum ThreadLogMode { diff --git a/src/lib.rs b/src/lib.rs index f019e7e2..e6eb84c3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -24,7 +24,9 @@ mod config; mod loggers; -pub use self::config::{Config, ConfigBuilder, LevelPadding, ThreadLogMode, ThreadPadding, TargetPadding}; +pub use self::config::{ + Config, ConfigBuilder, LevelPadding, TargetPadding, ThreadLogMode, ThreadPadding, +}; #[cfg(feature = "test")] pub use self::loggers::TestLogger; pub use self::loggers::{CombinedLogger, SimpleLogger, WriteLogger}; diff --git a/src/loggers/logging.rs b/src/loggers/logging.rs index ce465b31..9eefeab6 100644 --- a/src/loggers/logging.rs +++ b/src/loggers/logging.rs @@ -79,10 +79,20 @@ where // dbg!(&config.target_padding); match config.target_padding { TargetPadding::Left(pad) => { - write!(write, "{target:>pad$}: ", pad = pad, target = record.target())?; + write!( + write, + "{target:>pad$}: ", + pad = pad, + target = record.target() + )?; } TargetPadding::Right(pad) => { - write!(write, "{target: { write!(write, "{}: ", record.target())?; From 09da042e5c5eced2781fa0e051314d814b38582a Mon Sep 17 00:00:00 2001 From: tekjar Date: Sun, 7 Nov 2021 08:45:19 +0530 Subject: [PATCH 3/3] Remove modulepad example --- examples/modulepad.rs | 52 ------------------------------------------- 1 file changed, 52 deletions(-) delete mode 100644 examples/modulepad.rs diff --git a/examples/modulepad.rs b/examples/modulepad.rs deleted file mode 100644 index 6849f233..00000000 --- a/examples/modulepad.rs +++ /dev/null @@ -1,52 +0,0 @@ -use log::*; -use simplelog::*; - -mod a { - use log::*; - - pub(crate) fn print(client_id: &str, connection_id: usize) { - info!( - "{:15.15}[I] {:20} id = {}", - client_id, "connect", connection_id - ); - } -} - -mod aaaa { - use log::*; - - pub fn print(client_id: &str, connection_id: usize) { - info!( - "{:15.15}[I] {:20} id = {}", - client_id, "connect", connection_id - ); - } -} - -fn main() { - let mut config = simplelog::ConfigBuilder::new(); - config - .set_time_format("".to_owned()) - .set_location_level(LevelFilter::Off) - .set_target_level(LevelFilter::Error) - .set_target_padding(TargetPadding::Right(15)) - .set_thread_level(LevelFilter::Error) - .set_thread_padding(ThreadPadding::Left(2)) - .set_level_color(Level::Trace, Some(Color::Cyan)) - .set_level_padding(LevelPadding::Right); - - let loggers = TermLogger::new( - LevelFilter::Debug, - config.build(), - TerminalMode::Mixed, - ColorChoice::Always, - ); - CombinedLogger::init(vec![loggers]).unwrap(); - - error!("Bright red error"); - info!("This only appears in the log file"); - debug!("This level is currently not enabled for any logger"); - - a::print("hello", 1); - aaaa::print("world", 10); -}