15 , m_bUsingColors(streamConfig.bUseColors)
16 , m_bSyncUsualAndErrorMessages(streamConfig.bSyncUsualAndErrorMessages)
23 std::thread::id threadId,
24 std::chrono::system_clock::time_point messageTime,
26 string_view svFunction,
28 string_view svMessage)
32 color lineColor = color::white();
35 case verbosity::detailed:
36 case verbosity::verbose:
37 lineColor = color::gray();
41 lineColor = color::white();
44 case verbosity::important:
45 lineColor = color::khaki();
48 case verbosity::warning:
49 lineColor = color::orange();
52 case verbosity::error:
53 lineColor = color::crimson();
56 case verbosity::critical:
57 lineColor = color::dark_red();
61 struct logger_color_range
64 color partColor = color::white();
67 std::array<logger_color_range, 16> colors;
68 size_t nColorsCount = 0;
70 if (
const size_t nPos = svMessage.find(
category.
get_name()); nPos != string::npos)
72 colors[0] = { .svPart = { svMessage.begin(), svMessage.begin() + nPos }, .partColor = lineColor };
75 colors[1] = { .svPart = { svMessage.begin() + nPos, svMessage.begin() + nPos +
category.
get_name().size() },
80 colors[2] = { .svPart = { svMessage.begin() + nPos +
category.
get_name().size(),
81 svMessage.begin() + svMessage.size() - 1 },
82 .partColor = lineColor };
88 colors[0] = { .svPart = { svMessage.begin(), svMessage.begin() + svMessage.
size() - 1 },
89 .partColor = lineColor };
93 for (
size_t i = 0; i < nColorsCount; ++i)
95 cout_colorized(eVerbosity, colors[i].svPart, colors[i].partColor);
99 cout_common(eVerbosity, { &svMessage.back(), 1 });
103 cout_common(eVerbosity, svMessage);
109 if (m_bSyncUsualAndErrorMessages)
111 const bool bCurrentMessageIsError =
is_error(eCurrentMessageVerbosity);
113 if (bCurrentMessageIsError != m_bPrevMessageWasError)
116 m_bPrevMessageWasError = bCurrentMessageIsError;
Base class for logger streams.
void flush()
Flush the stream.
void check_previous_message(verbosity eCurrentMessageVerbosity)
Check the previous message type and flush if needed.
base_standard_streams_stream(const config &streamConfig) noexcept
base_standard_streams_stream object constructor
virtual void do_log(const category &category, verbosity eVerbosity, std::thread::id threadId, std::chrono::system_clock::time_point messageTime, string_view svFile, string_view svFunction, int nLine, string_view svMessage) override
Proceed stream logging.
A category is a class that identifies a particular piece of code. This code can be located in differe...
constexpr string_view get_name() const noexcept
Get category name.
constexpr const color & get_color() const noexcept
Get category color.
static constexpr size_t size() noexcept
Get number of float components.
bool is_error(verbosity eVerbosity) noexcept
Check if the verbosity level is an error.