Corium 1.1.0
High-Performance Zero-Heap C++20 MPSC Application Runtime
Loading...
Searching...
No Matches
FileLogSink.hpp
Go to the documentation of this file.
1
7#pragma once
8
9#include <cstdio>
11
12namespace corium::logging::sinks {
13
16public:
17 FileLogSink() = default;
18
19 explicit FileLogSink(const char* filePath)
20 {
21 open(filePath);
22 }
23
25 {
26 close();
27 }
28
29 FileLogSink(const FileLogSink&) = delete;
31
32 FileLogSink(FileLogSink&& rhs) noexcept
33 {
34 _file = rhs._file;
35 rhs._file = nullptr;
36 }
37
39 {
40 if (this != &rhs) {
41 close();
42 _file = rhs._file;
43 rhs._file = nullptr;
44 }
45 return *this;
46 }
47
49 bool open(const char* filePath)
50 {
51 close();
52 if (filePath && filePath[0] != '\0') {
53#if defined(_MSC_VER)
54 ::fopen_s(&_file, filePath, "a");
55#else
56 _file = std::fopen(filePath, "a");
57#endif
58 }
59 return _file != nullptr;
60 }
61
63 void close() noexcept
64 {
65 if (_file) {
66 (void)std::fclose(_file);
67 _file = nullptr;
68 }
69 }
70
72 template <std::size_t N>
73 void write(const LogEventT<N>& event) const
74 {
75 if (_file) {
76 (void)std::fprintf(_file, "[%s] [%s] %.*s\n",
78 event.category,
79 static_cast<int>(event.length),
80 event.message.data());
81 (void)std::fflush(_file);
82 }
83 }
84
85 [[nodiscard]] bool isOpen() const noexcept
86 {
87 return _file != nullptr;
88 }
89
90private:
91 std::FILE* _file = nullptr;
92};
93
94} // namespace corium::logging::sinks
Zero-heap fixed-capacity inline buffer log event record.
File log sink appending formatted log entries to a designated file.
Definition FileLogSink.hpp:15
FileLogSink & operator=(const FileLogSink &)=delete
FileLogSink(FileLogSink &&rhs) noexcept
Definition FileLogSink.hpp:32
FileLogSink(const char *filePath)
Definition FileLogSink.hpp:19
void close() noexcept
Close target log file.
Definition FileLogSink.hpp:63
FileLogSink(const FileLogSink &)=delete
bool open(const char *filePath)
Open target log file in append mode.
Definition FileLogSink.hpp:49
bool isOpen() const noexcept
Definition FileLogSink.hpp:85
void write(const LogEventT< N > &event) const
Write log event entry to file.
Definition FileLogSink.hpp:73
~FileLogSink()
Definition FileLogSink.hpp:24
FileLogSink & operator=(FileLogSink &&rhs) noexcept
Definition FileLogSink.hpp:38
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
std::array< char, MaxMessageLength > message
Definition LogEvent.hpp:23
LogLevel level
Definition LogEvent.hpp:22