From bcc31d2df0afc2a6fa9f0d591a3c68f901a9ebc8 Mon Sep 17 00:00:00 2001 From: Jan Buenker Date: Thu, 30 Jun 2022 12:20:19 +0200 Subject: [PATCH] Have logger::set_pattern call sink::set_pattern Previously it instantiated a new pattern_formatter and called sink::set_formatter with it, overwriting the old formatter, and any custom settings, completely. Now, if a custom sink inherits base_sink, a call from logger::set_pattern will arrive at custom_sink::set_pattern_ as expected, instead of custom_sink::set_formatter_. --- include/spdlog/logger-inl.h | 6 ++++-- include/spdlog/sinks/ansicolor_sink-inl.h | 4 ++-- include/spdlog/sinks/ansicolor_sink.h | 2 +- include/spdlog/sinks/base_sink-inl.h | 8 ++++---- include/spdlog/sinks/base_sink.h | 4 ++-- include/spdlog/sinks/dist_sink.h | 4 ++-- include/spdlog/sinks/sink.h | 2 +- include/spdlog/sinks/stdout_sinks-inl.h | 4 ++-- include/spdlog/sinks/stdout_sinks.h | 2 +- include/spdlog/sinks/wincolor_sink-inl.h | 4 ++-- include/spdlog/sinks/wincolor_sink.h | 2 +- 11 files changed, 22 insertions(+), 20 deletions(-) diff --git a/include/spdlog/logger-inl.h b/include/spdlog/logger-inl.h index 411f2cb5..2008b204 100644 --- a/include/spdlog/logger-inl.h +++ b/include/spdlog/logger-inl.h @@ -100,8 +100,10 @@ SPDLOG_INLINE void logger::set_formatter(std::unique_ptr f) SPDLOG_INLINE void logger::set_pattern(std::string pattern, pattern_time_type time_type) { - auto new_formatter = details::make_unique(std::move(pattern), time_type); - set_formatter(std::move(new_formatter)); + for (auto it = sinks_.begin(); it != sinks_.end(); ++it) + { + (*it)->set_pattern(pattern, time_type); + } } // create new backtrace sink and move to it all our child sinks diff --git a/include/spdlog/sinks/ansicolor_sink-inl.h b/include/spdlog/sinks/ansicolor_sink-inl.h index b5848f2d..47ad9479 100644 --- a/include/spdlog/sinks/ansicolor_sink-inl.h +++ b/include/spdlog/sinks/ansicolor_sink-inl.h @@ -73,10 +73,10 @@ SPDLOG_INLINE void ansicolor_sink::flush() } template -SPDLOG_INLINE void ansicolor_sink::set_pattern(const std::string &pattern) +SPDLOG_INLINE void ansicolor_sink::set_pattern(const std::string &pattern, pattern_time_type time_type) { std::lock_guard lock(mutex_); - formatter_ = std::unique_ptr(new pattern_formatter(pattern)); + formatter_ = std::unique_ptr(new pattern_formatter(pattern, time_type)); } template diff --git a/include/spdlog/sinks/ansicolor_sink.h b/include/spdlog/sinks/ansicolor_sink.h index 39d966bc..4a3fc398 100644 --- a/include/spdlog/sinks/ansicolor_sink.h +++ b/include/spdlog/sinks/ansicolor_sink.h @@ -41,7 +41,7 @@ public: void log(const details::log_msg &msg) override; void flush() override; - void set_pattern(const std::string &pattern) final; + void set_pattern(const std::string &pattern, pattern_time_type time_type = pattern_time_type::local) final; void set_formatter(std::unique_ptr sink_formatter) override; // Formatting codes diff --git a/include/spdlog/sinks/base_sink-inl.h b/include/spdlog/sinks/base_sink-inl.h index 421fdf9d..8f151060 100644 --- a/include/spdlog/sinks/base_sink-inl.h +++ b/include/spdlog/sinks/base_sink-inl.h @@ -37,10 +37,10 @@ void SPDLOG_INLINE spdlog::sinks::base_sink::flush() } template -void SPDLOG_INLINE spdlog::sinks::base_sink::set_pattern(const std::string &pattern) +void SPDLOG_INLINE spdlog::sinks::base_sink::set_pattern(const std::string &pattern, pattern_time_type time_type) { std::lock_guard lock(mutex_); - set_pattern_(pattern); + set_pattern_(pattern, time_type); } template @@ -51,9 +51,9 @@ void SPDLOG_INLINE spdlog::sinks::base_sink::set_formatter(std::unique_pt } template -void SPDLOG_INLINE spdlog::sinks::base_sink::set_pattern_(const std::string &pattern) +void SPDLOG_INLINE spdlog::sinks::base_sink::set_pattern_(const std::string &pattern, pattern_time_type time_type) { - set_formatter_(details::make_unique(pattern)); + set_formatter_(details::make_unique(pattern, time_type)); } template diff --git a/include/spdlog/sinks/base_sink.h b/include/spdlog/sinks/base_sink.h index 2e795f59..9f3540e0 100644 --- a/include/spdlog/sinks/base_sink.h +++ b/include/spdlog/sinks/base_sink.h @@ -31,7 +31,7 @@ public: void log(const details::log_msg &msg) final; void flush() final; - void set_pattern(const std::string &pattern) final; + void set_pattern(const std::string &pattern, pattern_time_type time_type = pattern_time_type::local) final; void set_formatter(std::unique_ptr sink_formatter) final; protected: @@ -41,7 +41,7 @@ protected: virtual void sink_it_(const details::log_msg &msg) = 0; virtual void flush_() = 0; - virtual void set_pattern_(const std::string &pattern); + virtual void set_pattern_(const std::string &pattern, pattern_time_type time_type); virtual void set_formatter_(std::unique_ptr sink_formatter); }; } // namespace sinks diff --git a/include/spdlog/sinks/dist_sink.h b/include/spdlog/sinks/dist_sink.h index 8fccb4ee..ad8317b2 100644 --- a/include/spdlog/sinks/dist_sink.h +++ b/include/spdlog/sinks/dist_sink.h @@ -74,9 +74,9 @@ protected: } } - void set_pattern_(const std::string &pattern) override + void set_pattern_(const std::string &pattern, pattern_time_type time_type = pattern_time_type::local) override { - set_formatter_(details::make_unique(pattern)); + set_formatter_(details::make_unique(pattern, time_type)); } void set_formatter_(std::unique_ptr sink_formatter) override diff --git a/include/spdlog/sinks/sink.h b/include/spdlog/sinks/sink.h index 0a28cccc..5e41f968 100644 --- a/include/spdlog/sinks/sink.h +++ b/include/spdlog/sinks/sink.h @@ -15,7 +15,7 @@ public: virtual ~sink() = default; virtual void log(const details::log_msg &msg) = 0; virtual void flush() = 0; - virtual void set_pattern(const std::string &pattern) = 0; + virtual void set_pattern(const std::string &pattern, pattern_time_type time_type = pattern_time_type::local) = 0; virtual void set_formatter(std::unique_ptr sink_formatter) = 0; void set_level(level::level_enum log_level); diff --git a/include/spdlog/sinks/stdout_sinks-inl.h b/include/spdlog/sinks/stdout_sinks-inl.h index 756734bf..e36bae0e 100644 --- a/include/spdlog/sinks/stdout_sinks-inl.h +++ b/include/spdlog/sinks/stdout_sinks-inl.h @@ -85,10 +85,10 @@ SPDLOG_INLINE void stdout_sink_base::flush() } template -SPDLOG_INLINE void stdout_sink_base::set_pattern(const std::string &pattern) +SPDLOG_INLINE void stdout_sink_base::set_pattern(const std::string &pattern, pattern_time_type time_type) { std::lock_guard lock(mutex_); - formatter_ = std::unique_ptr(new pattern_formatter(pattern)); + formatter_ = std::unique_ptr(new pattern_formatter(pattern, time_type)); } template diff --git a/include/spdlog/sinks/stdout_sinks.h b/include/spdlog/sinks/stdout_sinks.h index 6fdc0de3..8c11c4bd 100644 --- a/include/spdlog/sinks/stdout_sinks.h +++ b/include/spdlog/sinks/stdout_sinks.h @@ -32,7 +32,7 @@ public: void log(const details::log_msg &msg) override; void flush() override; - void set_pattern(const std::string &pattern) override; + void set_pattern(const std::string &pattern, pattern_time_type time_type = pattern_time_type::local) override; void set_formatter(std::unique_ptr sink_formatter) override; diff --git a/include/spdlog/sinks/wincolor_sink-inl.h b/include/spdlog/sinks/wincolor_sink-inl.h index be3d80a2..42db66ff 100644 --- a/include/spdlog/sinks/wincolor_sink-inl.h +++ b/include/spdlog/sinks/wincolor_sink-inl.h @@ -85,10 +85,10 @@ void SPDLOG_INLINE wincolor_sink::flush() } template -void SPDLOG_INLINE wincolor_sink::set_pattern(const std::string &pattern) +void SPDLOG_INLINE wincolor_sink::set_pattern(const std::string &pattern, pattern_time_type time_type) { std::lock_guard lock(mutex_); - formatter_ = std::unique_ptr(new pattern_formatter(pattern)); + formatter_ = std::unique_ptr(new pattern_formatter(pattern, time_type)); } template diff --git a/include/spdlog/sinks/wincolor_sink.h b/include/spdlog/sinks/wincolor_sink.h index 9b030fc1..cc5d9124 100644 --- a/include/spdlog/sinks/wincolor_sink.h +++ b/include/spdlog/sinks/wincolor_sink.h @@ -34,7 +34,7 @@ public: void set_color(level::level_enum level, std::uint16_t color); void log(const details::log_msg &msg) final override; void flush() final override; - void set_pattern(const std::string &pattern) override final; + void set_pattern(const std::string &pattern, pattern_time_type time_type = pattern_time_type::local) override final; void set_formatter(std::unique_ptr sink_formatter) override final; void set_color_mode(color_mode mode);