|
Logger System 0.1.3
High-performance C++20 thread-safe logging system with asynchronous capabilities
|
Decorator that buffers log entries before writing to wrapped writer. More...
#include <buffered_writer.h>


Classes | |
| struct | stats |
| Statistics for the buffered writer. More... | |
Public Member Functions | |
| buffered_writer (std::unique_ptr< log_writer_interface > wrapped, size_t max_entries=DEFAULT_BUFFER_SIZE, std::chrono::milliseconds flush_interval=DEFAULT_FLUSH_INTERVAL) | |
| Construct a buffered writer. | |
| ~buffered_writer () override | |
| Destructor - flushes any remaining buffered entries. | |
| buffered_writer (const buffered_writer &)=delete | |
| buffered_writer & | operator= (const buffered_writer &)=delete |
| buffered_writer (buffered_writer &&)=delete | |
| buffered_writer & | operator= (buffered_writer &&)=delete |
| common::VoidResult | write (const log_entry &entry) override |
| Write a log entry to the buffer. | |
| common::VoidResult | flush () override |
| Flush all buffered entries to the wrapped writer. | |
| size_t | get_buffer_count () const |
| Get the current number of buffered entries. | |
| size_t | get_max_entries () const noexcept |
| Get the maximum buffer size. | |
| std::chrono::milliseconds | get_flush_interval () const noexcept |
| Get the configured flush interval. | |
| const stats & | get_stats () const noexcept |
| Get buffered writer statistics. | |
| void | reset_stats () |
| Reset statistics counters. | |
Public Member Functions inherited from kcenon::logger::decorator_writer_base | |
| decorator_writer_base (std::unique_ptr< log_writer_interface > wrapped, std::string_view decorator_name) | |
| Construct a decorator writer base. | |
| ~decorator_writer_base () override=default | |
| Virtual destructor for proper cleanup. | |
| decorator_writer_base (const decorator_writer_base &)=delete | |
| decorator_writer_base & | operator= (const decorator_writer_base &)=delete |
| decorator_writer_base (decorator_writer_base &&) noexcept=default | |
| decorator_writer_base & | operator= (decorator_writer_base &&) noexcept=default |
| common::VoidResult | flush () override |
| Flush the wrapped writer. | |
| std::string | get_name () const override |
| Get the name of this writer. | |
| bool | is_healthy () const override |
| Check if the writer is healthy. | |
| const log_writer_interface * | get_wrapped_writer () const noexcept |
| Get the wrapped writer (const version) | |
Public Member Functions inherited from kcenon::logger::log_writer_interface | |
| virtual | ~log_writer_interface ()=default |
| virtual common::VoidResult | close () |
| Close the writer and release resources. | |
| virtual auto | is_open () const -> bool |
| Check if writer is open and ready. | |
Static Public Attributes | |
| static constexpr size_t | DEFAULT_BUFFER_SIZE = 100 |
| Default buffer size (number of entries) | |
| static constexpr std::chrono::milliseconds | DEFAULT_FLUSH_INTERVAL {5000} |
| Default flush interval. | |
Static Public Attributes inherited from kcenon::logger::decorator_writer_tag | |
| static constexpr writer_category | category = writer_category::decorator |
Private Member Functions | |
| common::VoidResult | flush_buffer_unsafe () |
| Flush buffer without acquiring mutex (caller must hold lock) | |
| bool | should_flush_by_time () const |
| Check if time-based flush is needed. | |
Static Private Member Functions | |
| static log_entry | copy_entry (const log_entry &entry) |
| Copy a log entry for buffer storage. | |
Private Attributes | |
| size_t | max_entries_ |
| std::chrono::milliseconds | flush_interval_ |
| std::mutex | mutex_ |
| std::vector< log_entry > | buffer_ |
| std::chrono::steady_clock::time_point | last_flush_time_ |
| stats | stats_ |
Additional Inherited Members | |
Protected Member Functions inherited from kcenon::logger::decorator_writer_base | |
| log_writer_interface & | wrapped () noexcept |
| Access the wrapped writer (non-const) | |
| const log_writer_interface & | wrapped () const noexcept |
| Access the wrapped writer (const) | |
| const std::string & | decorator_name () const noexcept |
| Get the decorator name. | |
Decorator that buffers log entries before writing to wrapped writer.
This class implements the Decorator pattern for log writers. It wraps any log_writer_interface implementation and buffers log entries up to a configurable limit before flushing them to the wrapped writer.
Key features:
Flush triggers:
Category: Synchronous (immediate return), Decorator
Definition at line 81 of file buffered_writer.h.
|
explicit |
Construct a buffered writer.
| wrapped | The writer to wrap with buffering |
| max_entries | Maximum number of entries to buffer before auto-flush |
| flush_interval | Maximum time between flushes (0 disables time-based flush) |
| std::invalid_argument | if wrapped is nullptr |
| std::invalid_argument | if max_entries is 0 |
Definition at line 18 of file buffered_writer.cpp.
References buffer_, and max_entries_.
|
override |
Destructor - flushes any remaining buffered entries.
Ensures no log entries are lost by flushing the buffer before destruction. Any errors during final flush are silently ignored as there's no way to report them.
Definition at line 31 of file buffered_writer.cpp.
References buffer_, flush_buffer_unsafe(), and mutex_.

|
delete |
|
delete |
Copy a log entry for buffer storage.
| entry | Source entry to copy |
Definition at line 109 of file buffered_writer.cpp.
References kcenon::logger::log_entry::level, kcenon::logger::log_entry::location, kcenon::logger::log_entry::message, kcenon::logger::log_entry::timestamp, and kcenon::logger::small_string< SSO_SIZE >::to_string().
Referenced by write().


|
overridevirtual |
Flush all buffered entries to the wrapped writer.
Writes all buffered entries to the wrapped writer and clears the buffer. Also calls flush() on the wrapped writer.
Implements kcenon::logger::log_writer_interface.
Definition at line 66 of file buffered_writer.cpp.
References buffer_, flush_buffer_unsafe(), kcenon::logger::buffered_writer::stats::manual_flushes, mutex_, and stats_.

|
private |
Flush buffer without acquiring mutex (caller must hold lock)
Definition at line 76 of file buffered_writer.cpp.
References buffer_, kcenon::logger::log_writer_interface::flush(), last_flush_time_, stats_, kcenon::logger::buffered_writer::stats::total_flushes, kcenon::logger::decorator_writer_base::wrapped(), and kcenon::logger::log_writer_interface::write().
Referenced by flush(), write(), and ~buffered_writer().


| size_t kcenon::logger::buffered_writer::get_buffer_count | ( | ) | const |
|
noexcept |
Get the configured flush interval.
Definition at line 130 of file buffered_writer.cpp.
References flush_interval_.
|
noexcept |
Get the maximum buffer size.
Definition at line 126 of file buffered_writer.cpp.
References max_entries_.
|
noexcept |
Get buffered writer statistics.
Definition at line 134 of file buffered_writer.cpp.
References stats_.
|
delete |
|
delete |
| void kcenon::logger::buffered_writer::reset_stats | ( | ) |
Reset statistics counters.
Definition at line 138 of file buffered_writer.cpp.
References kcenon::logger::buffered_writer::stats::flush_on_full, kcenon::logger::buffered_writer::stats::flush_on_interval, kcenon::logger::buffered_writer::stats::manual_flushes, stats_, kcenon::logger::buffered_writer::stats::total_entries_written, and kcenon::logger::buffered_writer::stats::total_flushes.
|
private |
Check if time-based flush is needed.
Definition at line 99 of file buffered_writer.cpp.
References flush_interval_, and last_flush_time_.
Referenced by write().

|
overridevirtual |
Write a log entry to the buffer.
| entry | The log entry to write |
Adds the entry to the internal buffer. If the buffer becomes full or the flush interval has elapsed, triggers an automatic flush.
Implements kcenon::logger::decorator_writer_base.
Definition at line 39 of file buffered_writer.cpp.
References buffer_, copy_entry(), flush_buffer_unsafe(), kcenon::logger::buffered_writer::stats::flush_on_full, kcenon::logger::buffered_writer::stats::flush_on_interval, max_entries_, mutex_, kcenon::common::ok(), should_flush_by_time(), stats_, and kcenon::logger::buffered_writer::stats::total_entries_written.

|
private |
Definition at line 239 of file buffered_writer.h.
Referenced by buffered_writer(), flush(), flush_buffer_unsafe(), get_buffer_count(), write(), and ~buffered_writer().
|
staticconstexpr |
Default buffer size (number of entries)
Definition at line 86 of file buffered_writer.h.
|
staticconstexpr |
|
private |
Definition at line 236 of file buffered_writer.h.
Referenced by get_flush_interval(), and should_flush_by_time().
|
private |
Definition at line 240 of file buffered_writer.h.
Referenced by flush_buffer_unsafe(), and should_flush_by_time().
|
private |
Definition at line 235 of file buffered_writer.h.
Referenced by buffered_writer(), get_max_entries(), and write().
|
mutableprivate |
Definition at line 238 of file buffered_writer.h.
Referenced by flush(), get_buffer_count(), write(), and ~buffered_writer().
|
mutableprivate |
Definition at line 242 of file buffered_writer.h.
Referenced by flush(), flush_buffer_unsafe(), get_stats(), reset_stats(), and write().