|
Logger System 1.0.0
High-performance C++20 thread-safe logging system with asynchronous capabilities
|
Core file writer for logging to files. More...
#include <file_writer.h>


Public Member Functions | |
| file_writer (const std::string &filename, bool append=true, std::unique_ptr< log_formatter_interface > formatter=nullptr, bool binary=false) | |
| Constructor. | |
| ~file_writer () override | |
| Destructor. | |
| file_writer (const file_writer &)=delete | |
| file_writer & | operator= (const file_writer &)=delete |
| file_writer (file_writer &&)=delete | |
| file_writer & | operator= (file_writer &&)=delete |
| common::VoidResult | write (const log_entry &entry) override |
| Write a log entry to file. | |
| common::VoidResult | flush () override |
| Flush file stream. | |
| common::VoidResult | close () override |
| Close the file. | |
| std::string | get_name () const override |
| Get writer name. | |
| bool | is_open () const override |
| Check if file is open. | |
| bool | is_healthy () const override |
| Check if writer is healthy. | |
| size_t | get_file_size () const |
| Get current file size. | |
| void | set_integrity_policy (std::shared_ptr< security::integrity_policy > policy) |
| Enable tamper-evident integrity signing for every record. | |
Public Member Functions inherited from kcenon::logger::log_writer_interface | |
| virtual | ~log_writer_interface ()=default |
Protected Member Functions | |
| std::string | format_entry (const log_entry &entry) const |
| Format a log entry using the current formatter. | |
| common::VoidResult | open_internal () |
| Open the file (internal, caller must hold mutex) | |
| void | close_internal () |
| Close the file (internal, caller must hold mutex) | |
| std::mutex & | get_mutex () const |
| Access the writer mutex for extended operations. | |
Protected Attributes | |
| std::string | filename_ |
| bool | append_mode_ |
| bool | binary_mode_ = false |
| std::ofstream | file_stream_ |
| std::atomic< bool > | is_open_ {false} |
| std::atomic< size_t > | bytes_written_ {0} |
| std::unique_ptr< log_formatter_interface > | formatter_ |
| std::shared_ptr< security::integrity_policy > | integrity_policy_ |
| Integrity policy shared with derived writers (e.g. rotating_file_writer). | |
| std::mutex | mutex_ |
Additional Inherited Members | |
Static Public Attributes inherited from kcenon::logger::sync_writer_tag | |
| static constexpr writer_category | category = writer_category::synchronous |
Core file writer for logging to files.
Pure file I/O implementation with direct mutex management. Designed to serve as the base layer in Decorator pattern compositions.
Thread-safe with internal mutex synchronization.
Category: Synchronous (blocking I/O to file)
Definition at line 46 of file file_writer.h.
|
explicit |
Constructor.
| filename | Path to the log file |
| append | Whether to append to existing file (default: true) |
| formatter | Custom log formatter (default: timestamp formatter) |
| binary | Whether to open the file in binary mode and skip the trailing newline that is otherwise appended after each record (default: false). Required when the caller writes pre-framed binary payloads such as those produced by encrypted_writer. |
Definition at line 15 of file file_writer.cpp.
References mutex_, and open_internal().

|
override |
Destructor.
Definition at line 27 of file file_writer.cpp.
References close_internal(), and mutex_.

|
delete |
|
delete |
|
overridevirtual |
Close the file.
Implements kcenon::logger::log_writer_interface.
Definition at line 81 of file file_writer.cpp.
References close_internal(), mutex_, and kcenon::common::ok().

|
protected |
Close the file (internal, caller must hold mutex)
Definition at line 145 of file file_writer.cpp.
References file_stream_, and is_open_.
Referenced by close(), and ~file_writer().

|
overridevirtual |
Flush file stream.
Implements kcenon::logger::log_writer_interface.
Definition at line 69 of file file_writer.cpp.
References kcenon::logger::utils::check_stream_state(), file_stream_, kcenon::logger::flush_timeout, is_open_, mutex_, kcenon::common::ok(), and kcenon::logger::utils::try_write_operation().

|
protected |
Format a log entry using the current formatter.
Definition at line 97 of file file_writer.cpp.
References formatter_, kcenon::logger::log_entry::message, and kcenon::logger::small_string< SSO_SIZE >::to_string().
Referenced by write(), and kcenon::logger::rotating_file_writer::write().


|
inline |
Get current file size.
Definition at line 111 of file file_writer.h.
|
inlineprotected |
Access the writer mutex for extended operations.
Definition at line 148 of file file_writer.h.
Referenced by kcenon::logger::rotating_file_writer::rotate(), and kcenon::logger::rotating_file_writer::write().

|
inlineoverridevirtual |
Get writer name.
Implements kcenon::logger::log_writer_interface.
Reimplemented in kcenon::logger::rotating_file_writer.
Definition at line 96 of file file_writer.h.
Referenced by example_core_writers().

|
overridevirtual |
Check if writer is healthy.
Implements kcenon::logger::log_writer_interface.
Definition at line 87 of file file_writer.cpp.
References file_stream_, and is_open_.
|
inlinenodiscardoverridevirtual |
Check if file is open.
Implements kcenon::logger::log_writer_interface.
Definition at line 101 of file file_writer.h.
|
protected |
Open the file (internal, caller must hold mutex)
Definition at line 105 of file file_writer.cpp.
References append_mode_, binary_mode_, bytes_written_, kcenon::logger::utils::check_condition(), kcenon::logger::utils::ensure_directory_exists(), kcenon::logger::file_open_failed, file_stream_, filename_, is_open_, kcenon::common::ok(), and kcenon::logger::utils::try_open_operation().
Referenced by file_writer().


|
delete |
|
delete |
| void kcenon::logger::file_writer::set_integrity_policy | ( | std::shared_ptr< security::integrity_policy > | policy | ) |
Enable tamper-evident integrity signing for every record.
| policy | Signing policy (shared ownership); pass nullptr to disable. |
When a policy is installed, each written record is followed by a SIGNATURE[<policy>]:<hex> suffix on the same line (Issue #612, ISO/IEC 27001 A.12.4.2 / A.12.4.3). Existing log consumers that already parse a single line per record continue to work; the signature is simply appended at end-of-line before the newline.
Must be called before the writer is handed off to a logger — it is not safe to swap policies while concurrent writes are in flight.
Definition at line 91 of file file_writer.cpp.
References integrity_policy_, and mutex_.
|
overridevirtual |
Write a log entry to file.
| entry | The log entry to write |
Implements kcenon::logger::log_writer_interface.
Reimplemented in kcenon::logger::rotating_file_writer.
Definition at line 32 of file file_writer.cpp.
References binary_mode_, bytes_written_, kcenon::logger::utils::check_stream_state(), file_stream_, kcenon::logger::file_write_failed, format_entry(), kcenon::logger::security::format_signature_suffix(), integrity_policy_, is_open_, kcenon::logger::make_logger_void_result(), mutex_, and kcenon::logger::utils::try_write_operation().

|
protected |
Definition at line 152 of file file_writer.h.
Referenced by open_internal(), and kcenon::logger::rotating_file_writer::perform_rotation().
|
protected |
Definition at line 153 of file file_writer.h.
Referenced by open_internal(), and write().
|
protected |
Definition at line 157 of file file_writer.h.
Referenced by kcenon::logger::rotating_file_writer::get_file_size(), open_internal(), kcenon::logger::rotating_file_writer::perform_rotation(), write(), and kcenon::logger::rotating_file_writer::write().
|
protected |
Definition at line 155 of file file_writer.h.
Referenced by close_internal(), flush(), kcenon::logger::rotating_file_writer::get_file_size(), is_healthy(), open_internal(), kcenon::logger::rotating_file_writer::perform_rotation(), write(), and kcenon::logger::rotating_file_writer::write().
|
protected |
Definition at line 151 of file file_writer.h.
Referenced by kcenon::logger::rotating_file_writer::generate_rotated_filename(), kcenon::logger::rotating_file_writer::get_backup_files(), kcenon::logger::rotating_file_writer::get_file_size(), open_internal(), and kcenon::logger::rotating_file_writer::perform_rotation().
|
protected |
Definition at line 159 of file file_writer.h.
Referenced by format_entry().
|
protected |
Integrity policy shared with derived writers (e.g. rotating_file_writer).
Definition at line 161 of file file_writer.h.
Referenced by set_integrity_policy(), write(), and kcenon::logger::rotating_file_writer::write().
|
protected |
Definition at line 156 of file file_writer.h.
Referenced by close_internal(), flush(), is_healthy(), open_internal(), and write().
|
mutableprotected |
Definition at line 162 of file file_writer.h.
Referenced by close(), file_writer(), flush(), set_integrity_policy(), write(), and ~file_writer().