6#ifndef SPDLOG_HEADER_ONLY
20 template <
typename ConsoleMutex>
33 BACKGROUND_RED | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
37 template <
typename ConsoleMutex>
44 template <
typename ConsoleMutex>
47 std::lock_guard<mutex_t> lock(mutex_);
48 colors_[
static_cast<size_t>(level)] =
color;
51 template <
typename ConsoleMutex>
54 if (out_handle_ ==
nullptr || out_handle_ == INVALID_HANDLE_VALUE)
59 std::lock_guard<mutex_t> lock(mutex_);
63 formatter_->format(msg, formatted);
69 auto orig_attribs =
static_cast<WORD
>(set_foreground_color_(colors_[
static_cast<size_t>(msg.
level)]));
72 ::SetConsoleTextAttribute(
static_cast<HANDLE
>(out_handle_), orig_attribs);
77 write_to_file_(formatted);
81 template <
typename ConsoleMutex>
87 template <
typename ConsoleMutex>
90 std::lock_guard<mutex_t> lock(mutex_);
94 template <
typename ConsoleMutex>
97 std::lock_guard<mutex_t> lock(mutex_);
98 formatter_ = std::move(sink_formatter);
101 template <
typename ConsoleMutex>
104 std::lock_guard<mutex_t> lock(mutex_);
105 set_color_mode_impl(mode);
108 template <
typename ConsoleMutex>
115 bool in_console = ::GetConsoleMode(
static_cast<HANDLE
>(out_handle_), &console_mode) != 0;
116 should_do_colors_ = in_console;
125 template <
typename ConsoleMutex>
128 CONSOLE_SCREEN_BUFFER_INFO orig_buffer_info;
129 if (!::GetConsoleScreenBufferInfo(
static_cast<HANDLE
>(out_handle_), &orig_buffer_info))
132 return FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE;
136 auto new_attribs =
static_cast<WORD
>(attribs) | (orig_buffer_info.wAttributes & 0xfff0);
137 auto ignored = ::SetConsoleTextAttribute(
static_cast<HANDLE
>(out_handle_),
static_cast<WORD
>(new_attribs));
139 return static_cast<std::uint16_t
>(orig_buffer_info.wAttributes);
143 template <
typename ConsoleMutex>
148 auto size =
static_cast<DWORD
>(end - start);
149 auto ignored = ::WriteConsoleA(
static_cast<HANDLE
>(out_handle_), formatted.data() + start, size,
nullptr,
nullptr);
154 template <
typename ConsoleMutex>
157 auto size =
static_cast<DWORD
>(formatted.size());
158 DWORD bytes_written = 0;
159 auto ignored = ::WriteFile(
static_cast<HANDLE
>(out_handle_), formatted.data(), size, &bytes_written,
nullptr);
164 template <
typename ConsoleMutex>
166 :
wincolor_sink<ConsoleMutex>(::GetStdHandle(STD_OUTPUT_HANDLE), mode)
171 template <
typename ConsoleMutex>
173 :
wincolor_sink<ConsoleMutex>(::GetStdHandle(STD_ERROR_HANDLE), mode)
Definition wincolor_sink.h:27
void flush() final override
Definition wincolor_sink-inl.h:82
std::array< std::uint16_t, level::n_levels > colors_
Definition wincolor_sink.h:49
void log(const details::log_msg &msg) final override
Definition wincolor_sink-inl.h:52
void write_to_file_(const memory_buf_t &formatted)
Definition wincolor_sink-inl.h:155
void set_color_mode_impl(color_mode mode)
Definition wincolor_sink-inl.h:109
void print_range_(const memory_buf_t &formatted, size_t start, size_t end)
Definition wincolor_sink-inl.h:144
void set_formatter(std::unique_ptr< spdlog::formatter > sink_formatter) override final
Definition wincolor_sink-inl.h:95
~wincolor_sink() override
Definition wincolor_sink-inl.h:38
std::uint16_t set_foreground_color_(std::uint16_t attribs)
Definition wincolor_sink-inl.h:126
void set_pattern(const std::string &pattern) override final
Definition wincolor_sink-inl.h:88
void set_color_mode(color_mode mode)
Definition wincolor_sink-inl.h:102
wincolor_sink(void *out_handle, color_mode mode)
Definition wincolor_sink-inl.h:21
void set_color(level::level_enum level, std::uint16_t color)
Definition wincolor_sink-inl.h:45
wincolor_stderr_sink(color_mode mode=color_mode::automatic)
Definition wincolor_sink-inl.h:172
wincolor_stdout_sink(color_mode mode=color_mode::automatic)
Definition wincolor_sink-inl.h:165
#define SPDLOG_INLINE
Definition common.h:47
level_enum
Definition common.h:233
@ critical
Definition common.h:239
@ err
Definition common.h:238
@ warn
Definition common.h:237
@ info
Definition common.h:236
@ off
Definition common.h:240
@ trace
Definition common.h:234
@ debug
Definition common.h:235
color_mode
Definition common.h:278
fmt::basic_memory_buffer< char, 250 > memory_buf_t
Definition common.h:173
size_t color_range_end
Definition log_msg.h:29
level::level_enum level
Definition log_msg.h:23
size_t color_range_start
Definition log_msg.h:28
annotation details
Definition tag_strings.h:125