MayaFlux 0.5.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
ConsoleSink.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "Sink.hpp"
4
5#include "Ansi.hpp"
6
7namespace MayaFlux::Journal {
8
9class MAYAFLUX_API ConsoleSink : public Sink {
10private:
12
13public:
15 : m_colors_enabled(AnsiColors::initialize_console_colors())
16 {
17 }
18
19 void write(const JournalEntry& entry) override
20 {
21 write_to_stream(std::cout, entry);
22 }
23
24 void write(const RealtimeEntry& entry) override
25 {
26 write_to_stream(std::cout, entry);
27 }
28
29 void flush() override
30 {
31 std::cout.flush();
32 }
33
34 [[nodiscard]] bool is_available() const override
35 {
36 return std::cout.good();
37 }
38
39private:
40 template <typename Entry>
41
42 void write_to_stream(std::ostream& os, const Entry& entry)
43 {
44 if (m_colors_enabled) {
45 switch (entry.severity) {
46 case Severity::TRACE:
47 os << AnsiColors::Cyan;
48 break;
49 case Severity::DEBUG:
50 os << AnsiColors::Blue;
51 break;
52 case Severity::INFO:
53 os << AnsiColors::Green;
54 break;
55 case Severity::WARN:
56 os << AnsiColors::Yellow;
57 break;
58 case Severity::ERROR:
59 os << AnsiColors::BrightRed;
60 break;
61 case Severity::FATAL:
62 os << AnsiColors::BgRed << AnsiColors::White;
63 break;
64 case Severity::NONE:
65 default:
66 os << AnsiColors::Reset;
67 break;
68 }
69 }
70
71 os << "[" << Reflect::enum_to_string(entry.severity) << "]" << AnsiColors::Reset;
72
73 os << AnsiColors::Magenta << "[" << Reflect::enum_to_string(entry.component) << "]" << AnsiColors::Reset;
74
75 os << AnsiColors::Cyan << "[" << Reflect::enum_to_string(entry.context) << "]" << AnsiColors::Reset << " ";
76
77 if constexpr (std::is_same_v<Entry, JournalEntry>) {
78 os << entry.message;
79 if (entry.location.file_name() != nullptr) {
80 os << AnsiColors::BrightBlue << " (" << entry.location.file_name()
81 << ":" << entry.location.line() << ")" << AnsiColors::Reset;
82 }
83 } else {
84 os << entry.message;
85 if (entry.file_name != nullptr) {
86 os << AnsiColors::BrightBlue << " (" << entry.file_name
87 << ":" << entry.line << ")" << AnsiColors::Reset;
88 }
89 }
90
91 if (m_colors_enabled) {
92 os << AnsiColors::Reset;
93 }
94
95 os << '\n';
96 }
97
98 void feed_severity(std::ostream& os, Severity severity) const
99 {
100 switch (severity) {
101 case Severity::TRACE:
102 os << AnsiColors::Cyan;
103 break;
104 case Severity::DEBUG:
105 os << AnsiColors::Blue;
106 break;
107 case Severity::INFO:
108 os << AnsiColors::Green;
109 break;
110 case Severity::WARN:
111 os << AnsiColors::Yellow;
112 break;
113 case Severity::ERROR:
114 os << AnsiColors::BrightRed;
115 break;
116 case Severity::FATAL:
117 os << AnsiColors::BgRed << AnsiColors::White;
118 break;
119 case Severity::NONE:
120 default:
121 os << AnsiColors::Reset;
122 break;
123 }
124 }
125};
126
127} // namespace MayaFlux::Journal
std::string severity
Definition Config.cpp:18
void write(const RealtimeEntry &entry) override
Write a realtime entry to this sink.
void write_to_stream(std::ostream &os, const Entry &entry)
bool is_available() const override
Check if sink is available/healthy.
void feed_severity(std::ostream &os, Severity severity) const
void flush() override
Flush any buffered writes.
void write(const JournalEntry &entry) override
Write a journal entry to this sink.
A log entry structure to encapsulate log message details.
Lightweight entry for lock-free ring buffer.