From c563b62aea1542a2365bac4304990c81f7f5e511 Mon Sep 17 00:00:00 2001 From: gabime Date: Sat, 18 Jan 2025 11:40:38 +0200 Subject: [PATCH] Refactor ansicolor_sink.cpp --- include/spdlog/sinks/ansicolor_sink.h | 6 ++++-- src/sinks/ansicolor_sink.cpp | 15 ++++++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/include/spdlog/sinks/ansicolor_sink.h b/include/spdlog/sinks/ansicolor_sink.h index 30b19628..88c931ce 100644 --- a/include/spdlog/sinks/ansicolor_sink.h +++ b/include/spdlog/sinks/ansicolor_sink.h @@ -70,11 +70,13 @@ public: static constexpr std::string_view bold_on_red = "\033[1m\033[41m"; private: - void sink_it_(const details::log_msg &msg) override; - void flush_() override; FILE *target_file_; bool should_do_colors_; std::array colors_; + + void sink_it_(const details::log_msg &msg) override; + void flush_() override; + void set_color_mode_(color_mode mode); void print_ccode_(const string_view_t color_code); void print_range_(const memory_buf_t &formatted, size_t start, size_t end); static std::string to_string_(const string_view_t sv); diff --git a/src/sinks/ansicolor_sink.cpp b/src/sinks/ansicolor_sink.cpp index 6de54e50..2e52431e 100644 --- a/src/sinks/ansicolor_sink.cpp +++ b/src/sinks/ansicolor_sink.cpp @@ -13,7 +13,7 @@ namespace sinks { template ansicolor_sink::ansicolor_sink(FILE *target_file, color_mode mode) : target_file_(target_file) { - set_color_mode(mode); + set_color_mode_(mode); colors_.at(level_to_number(level::trace)) = to_string_(white); colors_.at(level_to_number(level::debug)) = to_string_(cyan); colors_.at(level_to_number(level::info)) = to_string_(green); @@ -37,22 +37,27 @@ bool ansicolor_sink::should_color() const { template void ansicolor_sink::set_color_mode(color_mode mode) { + std::lock_guard lock(base_sink::mutex_); + set_color_mode_(mode); +} + +template +void ansicolor_sink::set_color_mode_(color_mode mode) { std::lock_guard lock(base_sink::mutex_); switch (mode) { case color_mode::always: should_do_colors_ = true; - return; + return; case color_mode::automatic: should_do_colors_ = details::os::in_terminal(target_file_) && details::os::is_color_terminal(); - return; + return; case color_mode::never: should_do_colors_ = false; - return; + return; default: should_do_colors_ = false; } } - template void ansicolor_sink::sink_it_(const details::log_msg &msg) { // Wrap the originally formatted message in color codes.