Corium 1.1.0
High-Performance Zero-Heap C++20 MPSC Application Runtime
Loading...
Searching...
No Matches
JsonLogSink.hpp
Go to the documentation of this file.
1
7#pragma once
8
9#include <ostream>
10#include <string_view>
12
13namespace corium::logging::sinks {
14
19public:
20 explicit JsonLogSink(std::ostream& outputStream) noexcept
21 : _os(&outputStream)
22 {}
23
25 template <std::size_t N>
26 void write(const LogEventT<N>& event) const
27 {
28 if (!_os) return;
29
30 *_os << "{\"timestamp_ns\":" << event.timestampNs
31 << ",\"level\":\"" << logLevelToString(event.level) << "\""
32 << ",\"category\":\"" << event.category << "\""
33 << ",\"message\":\"";
34
35 // Escape JSON string characters
36 std::string_view msg = event.view();
37 for (char c : msg) {
38 switch (c) {
39 case '"': *_os << "\\\""; break;
40 case '\\': *_os << "\\\\"; break;
41 case '\b': *_os << "\\b"; break;
42 case '\f': *_os << "\\f"; break;
43 case '\n': *_os << "\\n"; break;
44 case '\r': *_os << "\\r"; break;
45 case '\t': *_os << "\\t"; break;
46 default: *_os << c; break;
47 }
48 }
49
50 *_os << "\"}\n" << std::flush;
51 }
52
53private:
54 std::ostream* _os{nullptr};
55};
56
57} // namespace corium::logging::sinks
Zero-heap fixed-capacity inline buffer log event record.
Structured JSON Lines (NDJSON) output log sink. Formats LogEvent records into JSON objects for struct...
Definition JsonLogSink.hpp:18
void write(const LogEventT< N > &event) const
Serialize log event as a single-line JSON string.
Definition JsonLogSink.hpp:26
JsonLogSink(std::ostream &outputStream) noexcept
Definition JsonLogSink.hpp:20
Definition ConsoleLogSink.hpp:12
constexpr const char * logLevelToString(LogLevel level) noexcept
Convert LogLevel enum to string representation.
Definition LogLevel.hpp:25
Zero-heap log event carrying fixed-size inline message buffer across MPSC event bus.
Definition LogEvent.hpp:21
LogLevel level
Definition LogEvent.hpp:22