9 #include "../details/null_mutex.h" 10 #include "base_sink.h" 14 #include <unordered_map> 26 const WORD BOLD = FOREGROUND_INTENSITY;
27 const WORD RED = FOREGROUND_RED;
28 const WORD GREEN = FOREGROUND_GREEN;
29 const WORD CYAN = FOREGROUND_GREEN | FOREGROUND_BLUE;
30 const WORD WHITE = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE;
31 const WORD YELLOW = FOREGROUND_RED | FOREGROUND_GREEN;
34 : out_handle_(std_handle)
36 colors_[level::trace] = WHITE;
37 colors_[level::debug] = CYAN;
38 colors_[level::info] = GREEN;
39 colors_[level::warn] = YELLOW | BOLD;
40 colors_[level::err] = RED | BOLD;
41 colors_[level::critical] = BACKGROUND_RED | WHITE | BOLD;
42 colors_[level::off] = 0;
54 void set_color(level::level_enum level, WORD color)
57 colors_[level] = color;
63 if (msg.color_range_end > msg.color_range_start)
66 _print_range(msg, 0, msg.color_range_start);
69 auto orig_attribs = set_console_attribs(colors_[msg.level]);
70 _print_range(msg, msg.color_range_start, msg.color_range_end);
71 ::SetConsoleTextAttribute(out_handle_, orig_attribs);
73 _print_range(msg, msg.color_range_end, msg.formatted.
size());
77 _print_range(msg, 0, msg.formatted.
size());
81 void _flush()
override 88 std::unordered_map<level::level_enum, WORD, level::level_hasher> colors_;
91 WORD set_console_attribs(WORD attribs)
93 CONSOLE_SCREEN_BUFFER_INFO orig_buffer_info;
94 GetConsoleScreenBufferInfo(out_handle_, &orig_buffer_info);
95 WORD back_color = orig_buffer_info.wAttributes;
97 back_color &=
static_cast<WORD
>(~(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY));
99 SetConsoleTextAttribute(out_handle_, attribs | back_color);
100 return orig_buffer_info.wAttributes;
106 DWORD size =
static_cast<DWORD
>(end - start);
107 WriteConsoleA(out_handle_, msg.formatted.
data() + start, size,
nullptr,
nullptr);
114 template<
class Mutex>
130 template<
class Mutex>
const Char * data() const FMT_NOEXCEPT
Definition: format.h:3280
Definition: wincolor_sink.h:23
Definition: wincolor_sink.h:131
Definition: async_logger.h:26
std::size_t size() const
Definition: format.h:3271
Definition: wincolor_sink.h:115
Definition: base_sink.h:23