Logger System 0.1.3
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
45public:
52 explicit file_writer(const std::string& filename,
53 bool append = true,
54 std::unique_ptr<log_formatter_interface> formatter = nullptr);
55
59 ~file_writer() override;
60
61 // Non-copyable and non-movable
62 file_writer(const file_writer&) = delete;
66
72 common::VoidResult write(const log_entry& entry) override;
73
78 common::VoidResult flush() override;
79
84 common::VoidResult close() override;
85
89 std::string get_name() const override { return "file"; }
90
94 [[nodiscard]] bool is_open() const override { return is_open_; }
95
99 bool is_healthy() const override;
100
104 size_t get_file_size() const { return bytes_written_.load(); }
105
106protected:
110 std::string format_entry(const log_entry& entry) const;
111
115 common::VoidResult open_internal();
116
120 void close_internal();
121
126 std::mutex& get_mutex() const { return mutex_; }
127
128protected:
129 std::string filename_;
131
132 std::ofstream file_stream_;
133 std::atomic<bool> is_open_{false};
134 std::atomic<size_t> bytes_written_{0};
135
136 std::unique_ptr<log_formatter_interface> formatter_;
137 mutable std::mutex mutex_;
138};
139
140} // namespace kcenon::logger
Core file writer for logging to files.
Definition file_writer.h:44
std::string get_name() const override
Get writer name.
Definition file_writer.h:89
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.
Definition file_writer.h:94
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.