From 3b81097ea63174b6c0776b6350585749beaebbe4 Mon Sep 17 00:00:00 2001 From: Nick Clavette <78097185+Nicholas-Clavette@users.noreply.github.com> Date: Sun, 12 Jan 2025 12:27:40 -0500 Subject: [PATCH] Implement `Debug` for `Logger` (#81) Co-authored-by: Nick Clavette Co-authored-by: Asuna --- spdlog/src/logger.rs | 37 +++++++++++++++++++++++++++++---- spdlog/src/test_utils/common.rs | 13 +++++++++--- 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/spdlog/src/logger.rs b/spdlog/src/logger.rs index 778cdae8..1996af57 100644 --- a/spdlog/src/logger.rs +++ b/spdlog/src/logger.rs @@ -1,4 +1,4 @@ -use std::{result::Result as StdResult, time::Duration}; +use std::{fmt::Debug, result::Result as StdResult, time::Duration}; use crate::{ env_level, @@ -115,6 +115,36 @@ pub struct Logger { periodic_flusher: Mutex>, } +impl Debug for Logger { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("Logger") + .field("name", &self.name) + .field("level_filter", &self.level_filter()) + .field( + "sinks", + &self + .sinks + .iter() + .map(|sink| sink.level_filter()) + .collect::>(), + ) + .field("flush_level_filter", &self.flush_level_filter()) + .field("error_handler", &self.error_handler.read()) + .field( + "periodic_flusher", + &self + .periodic_flusher + .lock() + .as_deref() + .map(|opt| opt.as_ref().map(|(dur, _)| *dur)) + .as_ref() + .map(|dur| dur as &dyn Debug) + .unwrap_or(&"*lock is poisoned*"), + ) + .finish() + } +} + impl Logger { /// Gets a [`LoggerBuilder`] with default parameters: /// @@ -665,9 +695,8 @@ mod tests { use crate::{prelude::*, test_utils::*}; #[test] - fn send_sync() { - assert_send::(); - assert_sync::(); + fn logger_traits() { + assert_trait!(Logger: Send + Sync + Debug); } #[test] diff --git a/spdlog/src/test_utils/common.rs b/spdlog/src/test_utils/common.rs index 972c010c..c0ae26d0 100644 --- a/spdlog/src/test_utils/common.rs +++ b/spdlog/src/test_utils/common.rs @@ -220,9 +220,16 @@ pub fn build_test_logger(cb: impl FnOnce(&mut LoggerBuilder) -> &mut LoggerBuild builder.build().unwrap() } -pub fn assert_send() {} - -pub fn assert_sync() {} +#[doc(hidden)] +#[macro_export] +macro_rules! assert_trait { + ($type:ty: $($traits:tt)+) => {{ + fn __assert_trait() {} + __assert_trait::<$type>(); + }}; +} +#[allow(unused_imports)] +pub use assert_trait; #[must_use] pub fn echo_logger_from_pattern(