Logger System 1.0.0
High-performance C++20 thread-safe logging system with asynchronous capabilities
Loading...
Searching...
No Matches
file_writer.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
12#pragma once
13
17
19
20#include <fstream>
21#include <atomic>
22#include <memory>
23#include <mutex>
24
25namespace kcenon::logger {
26
27namespace security { class integrity_policy; }
28
47public:
58 explicit file_writer(const std::string& filename,
59 bool append = true,
60 std::unique_ptr<log_formatter_interface> formatter = nullptr,
61 bool binary = false);
62
66 ~file_writer() override;
67
68 // Non-copyable and non-movable
69 file_writer(const file_writer&) = delete;
73
79 common::VoidResult write(const log_entry& entry) override;
80
85 common::VoidResult flush() override;
86
91 common::VoidResult close() override;
92
96 std::string get_name() const override { return "file"; }
97
101 [[nodiscard]] bool is_open() const override { return is_open_; }
102
106 bool is_healthy() const override;
107
111 size_t get_file_size() const { return bytes_written_.load(); }
112
126 void set_integrity_policy(std::shared_ptr<security::integrity_policy> policy);
127
128protected:
132 std::string format_entry(const log_entry& entry) const;
133
137 common::VoidResult open_internal();
138
142 void close_internal();
143
148 std::mutex& get_mutex() const { return mutex_; }
149
150protected:
151 std::string filename_;
153 bool binary_mode_ = false;
154
155 std::ofstream file_stream_;
156 std::atomic<bool> is_open_{false};
157 std::atomic<size_t> bytes_written_{0};
158
159 std::unique_ptr<log_formatter_interface> formatter_;
161 std::shared_ptr<security::integrity_policy> integrity_policy_;
162 mutable std::mutex mutex_;
163};
164
165} // namespace kcenon::logger
Core file writer for logging to files.
Definition file_writer.h:46
std::string get_name() const override
Get writer name.
Definition file_writer.h:96
std::shared_ptr< security::integrity_policy > integrity_policy_
Integrity policy shared with derived writers (e.g. rotating_file_writer).
std::unique_ptr< log_formatter_interface > formatter_
file_writer & operator=(const file_writer &)=delete
file_writer & operator=(file_writer &&)=delete
bool is_open() const override
Check if file is open.
size_t get_file_size() const
Get current file size.
std::mutex & get_mutex() const
Access the writer mutex for extended operations.
file_writer(const file_writer &)=delete
file_writer(file_writer &&)=delete
Base interface for all log writers and decorators.
Interface for log message formatters (Strategy Pattern) kcenon.
Base interface for all log writers and decorators.
DLL export/import macros for logger_system shared library support.
#define LOGGER_SYSTEM_API
Represents a single log entry with all associated metadata.
Definition log_entry.h:155
Tag interface for synchronous writers.
Writer category interfaces and type traits kcenon.