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_.
pull/2420/head
Jan Buenker 3 years ago
parent d7690d8e7e
commit bcc31d2df0

@ -100,8 +100,10 @@ SPDLOG_INLINE void logger::set_formatter(std::unique_ptr<formatter> f)
SPDLOG_INLINE void logger::set_pattern(std::string pattern, pattern_time_type time_type) SPDLOG_INLINE void logger::set_pattern(std::string pattern, pattern_time_type time_type)
{ {
auto new_formatter = details::make_unique<pattern_formatter>(std::move(pattern), time_type); for (auto it = sinks_.begin(); it != sinks_.end(); ++it)
set_formatter(std::move(new_formatter)); {
(*it)->set_pattern(pattern, time_type);
}
} }
// create new backtrace sink and move to it all our child sinks // create new backtrace sink and move to it all our child sinks

@ -73,10 +73,10 @@ SPDLOG_INLINE void ansicolor_sink<ConsoleMutex>::flush()
} }
template<typename ConsoleMutex> template<typename ConsoleMutex>
SPDLOG_INLINE void ansicolor_sink<ConsoleMutex>::set_pattern(const std::string &pattern) SPDLOG_INLINE void ansicolor_sink<ConsoleMutex>::set_pattern(const std::string &pattern, pattern_time_type time_type)
{ {
std::lock_guard<mutex_t> lock(mutex_); std::lock_guard<mutex_t> lock(mutex_);
formatter_ = std::unique_ptr<spdlog::formatter>(new pattern_formatter(pattern)); formatter_ = std::unique_ptr<spdlog::formatter>(new pattern_formatter(pattern, time_type));
} }
template<typename ConsoleMutex> template<typename ConsoleMutex>

@ -41,7 +41,7 @@ public:
void log(const details::log_msg &msg) override; void log(const details::log_msg &msg) override;
void flush() 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<spdlog::formatter> sink_formatter) override; void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) override;
// Formatting codes // Formatting codes

@ -37,10 +37,10 @@ void SPDLOG_INLINE spdlog::sinks::base_sink<Mutex>::flush()
} }
template<typename Mutex> template<typename Mutex>
void SPDLOG_INLINE spdlog::sinks::base_sink<Mutex>::set_pattern(const std::string &pattern) void SPDLOG_INLINE spdlog::sinks::base_sink<Mutex>::set_pattern(const std::string &pattern, pattern_time_type time_type)
{ {
std::lock_guard<Mutex> lock(mutex_); std::lock_guard<Mutex> lock(mutex_);
set_pattern_(pattern); set_pattern_(pattern, time_type);
} }
template<typename Mutex> template<typename Mutex>
@ -51,9 +51,9 @@ void SPDLOG_INLINE spdlog::sinks::base_sink<Mutex>::set_formatter(std::unique_pt
} }
template<typename Mutex> template<typename Mutex>
void SPDLOG_INLINE spdlog::sinks::base_sink<Mutex>::set_pattern_(const std::string &pattern) void SPDLOG_INLINE spdlog::sinks::base_sink<Mutex>::set_pattern_(const std::string &pattern, pattern_time_type time_type)
{ {
set_formatter_(details::make_unique<spdlog::pattern_formatter>(pattern)); set_formatter_(details::make_unique<spdlog::pattern_formatter>(pattern, time_type));
} }
template<typename Mutex> template<typename Mutex>

@ -31,7 +31,7 @@ public:
void log(const details::log_msg &msg) final; void log(const details::log_msg &msg) final;
void flush() 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<spdlog::formatter> sink_formatter) final; void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) final;
protected: protected:
@ -41,7 +41,7 @@ protected:
virtual void sink_it_(const details::log_msg &msg) = 0; virtual void sink_it_(const details::log_msg &msg) = 0;
virtual void flush_() = 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<spdlog::formatter> sink_formatter); virtual void set_formatter_(std::unique_ptr<spdlog::formatter> sink_formatter);
}; };
} // namespace sinks } // namespace sinks

@ -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<spdlog::pattern_formatter>(pattern)); set_formatter_(details::make_unique<spdlog::pattern_formatter>(pattern, time_type));
} }
void set_formatter_(std::unique_ptr<spdlog::formatter> sink_formatter) override void set_formatter_(std::unique_ptr<spdlog::formatter> sink_formatter) override

@ -15,7 +15,7 @@ public:
virtual ~sink() = default; virtual ~sink() = default;
virtual void log(const details::log_msg &msg) = 0; virtual void log(const details::log_msg &msg) = 0;
virtual void flush() = 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<spdlog::formatter> sink_formatter) = 0; virtual void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) = 0;
void set_level(level::level_enum log_level); void set_level(level::level_enum log_level);

@ -85,10 +85,10 @@ SPDLOG_INLINE void stdout_sink_base<ConsoleMutex>::flush()
} }
template<typename ConsoleMutex> template<typename ConsoleMutex>
SPDLOG_INLINE void stdout_sink_base<ConsoleMutex>::set_pattern(const std::string &pattern) SPDLOG_INLINE void stdout_sink_base<ConsoleMutex>::set_pattern(const std::string &pattern, pattern_time_type time_type)
{ {
std::lock_guard<mutex_t> lock(mutex_); std::lock_guard<mutex_t> lock(mutex_);
formatter_ = std::unique_ptr<spdlog::formatter>(new pattern_formatter(pattern)); formatter_ = std::unique_ptr<spdlog::formatter>(new pattern_formatter(pattern, time_type));
} }
template<typename ConsoleMutex> template<typename ConsoleMutex>

@ -32,7 +32,7 @@ public:
void log(const details::log_msg &msg) override; void log(const details::log_msg &msg) override;
void flush() 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<spdlog::formatter> sink_formatter) override; void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) override;

@ -85,10 +85,10 @@ void SPDLOG_INLINE wincolor_sink<ConsoleMutex>::flush()
} }
template<typename ConsoleMutex> template<typename ConsoleMutex>
void SPDLOG_INLINE wincolor_sink<ConsoleMutex>::set_pattern(const std::string &pattern) void SPDLOG_INLINE wincolor_sink<ConsoleMutex>::set_pattern(const std::string &pattern, pattern_time_type time_type)
{ {
std::lock_guard<mutex_t> lock(mutex_); std::lock_guard<mutex_t> lock(mutex_);
formatter_ = std::unique_ptr<spdlog::formatter>(new pattern_formatter(pattern)); formatter_ = std::unique_ptr<spdlog::formatter>(new pattern_formatter(pattern, time_type));
} }
template<typename ConsoleMutex> template<typename ConsoleMutex>

@ -34,7 +34,7 @@ public:
void set_color(level::level_enum level, std::uint16_t color); void set_color(level::level_enum level, std::uint16_t color);
void log(const details::log_msg &msg) final override; void log(const details::log_msg &msg) final override;
void flush() 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<spdlog::formatter> sink_formatter) override final; void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) override final;
void set_color_mode(color_mode mode); void set_color_mode(color_mode mode);

Loading…
Cancel
Save