15 , m_bUsingColors(config.bUseColors)
16 , m_bDuplicateErrorsToCout(config.bDuplicateErrorsToCout)
18 if (config.bDisableStdioSync)
22 std::ios_base::sync_with_stdio(
false);
30 std::wcin.tie(
nullptr);
31 std::wcout.tie(
nullptr);
37 QX_PERF_SCOPE(CatLogger,
"Flush to cout");
39 std::wcout << std::flush;
43 string_view svMessage,
45 const std::vector<logger_color_range>& colors,
48 QX_PERF_SCOPE(CatLogger,
"Log to cout");
50 thread_local
wstring sWideMessage;
53 if (m_bUsingColors && eVerbosity < verbosity::error)
55 color commonColor = color::white();
58 case verbosity::very_verbose:
59 case verbosity::verbose:
60 commonColor = color::gray();
64 commonColor = color::white();
67 case verbosity::important:
68 commonColor = color::khaki();
71 case verbosity::warning:
72 commonColor = color::orange();
75 case verbosity::error:
76 commonColor = color::crimson();
79 case verbosity::critical:
80 commonColor = color::dark_red();
84 auto cout_colorized = [](
size_t nStart,
size_t nEnd,
const color& rangeColor)
90 cout_colorized(0, colors.empty() ? sWideMessage.size() : colors.front().range.first, commonColor);
92 for (
size_t i = 0; i < colors.size(); ++i)
94 cout_colorized(colors[i].range.first, colors[i].range.second, colors[i].rangeColor);
96 colors[i].range.second,
97 i + 1 < colors.size() ? colors[i + 1].range.first : sWideMessage.size(),
101 else if (eVerbosity < verbosity::error)
103 std::wcout << sWideMessage;
107 std::wcerr << sWideMessage;
109 if (m_bDuplicateErrorsToCout)
111 std::wcout << sWideMessage;
119 m_bUsingColors = bUsingColors;
Base class for logger streams.
virtual void flush() override
Flush stream.
virtual void do_log(string_view svMessage, const log_unit &logUnit, const std::vector< logger_color_range > &colors, verbosity eVerbosity) override
Proceed stream logging.
void set_using_colors(bool bUsingColors) noexcept
Set whether cout output should be colored.
cout_logger_stream(cout_logger_config config=cout_logger_config())
cout_logger_stream object constructor
static constexpr terminal_color reset() noexcept
Reset all colors.
static constexpr terminal_color font(const color &fontColor) noexcept
Set font color.
wstring to_wstring(cstring_view stringView, const std::locale &locale=std::locale())
convert cstring to wstring