|
Logger System 0.1.3
High-performance C++20 thread-safe logging system with asynchronous capabilities
|
Asynchronous wrapper for log writers. More...
#include <async_writer.h>


Public Member Functions | |
| async_writer (std::unique_ptr< log_writer_interface > wrapped_writer, std::size_t queue_size=10000, std::chrono::seconds flush_timeout=std::chrono::seconds(5)) | |
| Constructor accepting log_writer_interface (Decorator pattern) | |
| ~async_writer () override | |
| Destructor. | |
| void | start () |
| Start the async writer thread. | |
| void | stop (bool force_flush=true) |
| Stop the async writer thread. | |
| common::VoidResult | write (const log_entry &entry) override |
| Write a log entry asynchronously. | |
| common::VoidResult | flush () override |
| Flush all pending messages. | |
| bool | is_healthy () const override |
| Check if the writer is healthy. | |
| std::string | get_name () const override |
| Get the name of this writer. | |
Public Member Functions inherited from kcenon::logger::queued_writer_base< std::queue< log_entry > > | |
| queued_writer_base (std::unique_ptr< log_writer_interface > wrapped_writer, std::size_t max_queue_size, std::string_view decorator_name) | |
| Constructor for queued writer base. | |
| ~queued_writer_base () override=default | |
| Virtual destructor. | |
| bool | is_healthy () const override |
| Check if the writer is healthy. | |
| std::size_t | get_queue_size () const |
| Get the current queue size. | |
| std::size_t | get_max_queue_size () const |
| Get maximum queue size. | |
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. | |
| 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. | |
Protected Member Functions | |
| common::VoidResult | handle_overflow (const log_entry &) override |
| Handle queue overflow. | |
| void | on_entry_enqueued () override |
| Called after entry is enqueued - notifies worker thread. | |
Protected Member Functions inherited from kcenon::logger::queued_writer_base< std::queue< log_entry > > | |
| common::VoidResult | try_enqueue (const log_entry &entry) |
| Try to enqueue an entry with overflow protection. | |
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. | |
Private Types | |
| using | base_type = queued_writer_base<std::queue<log_entry>> |
Private Member Functions | |
| void | process_messages () |
| Process messages from the queue. | |
| void | flush_remaining () |
| Flush any remaining messages after stopping. | |
Private Attributes | |
| std::chrono::seconds | flush_timeout_ |
| std::condition_variable | queue_cv_ |
| std::condition_variable | flush_cv_ |
| std::atomic< bool > | running_ |
| std::thread | worker_thread_ |
Additional Inherited Members | |
Static Public Attributes inherited from kcenon::logger::decorator_writer_tag | |
| static constexpr writer_category | category = writer_category::decorator |
Static Public Attributes inherited from kcenon::logger::async_writer_tag | |
| static constexpr writer_category | category = writer_category::asynchronous |
Static Protected Member Functions inherited from kcenon::logger::queued_writer_base< std::queue< log_entry > > | |
| static std::size_t | get_container_size (const std::queue< T > &container) |
| Get container size (specialization for std::queue) | |
| static std::size_t | get_container_size (const std::vector< T > &container) |
| Get container size (specialization for std::vector) | |
| static void | enqueue_entry (std::queue< T > &container, const log_entry &entry) |
| Enqueue entry (specialization for std::queue) | |
| static void | enqueue_entry (std::vector< T > &container, const log_entry &entry) |
| Enqueue entry (specialization for std::vector) | |
Protected Attributes inherited from kcenon::logger::queued_writer_base< std::queue< log_entry > > | |
| std::size_t | max_queue_size_ |
| std::mutex | queue_mutex_ |
| std::queue< log_entry > | queue_ |
| std::atomic< bool > | shutting_down_ |
Asynchronous wrapper for log writers.
This class wraps any base_writer implementation and provides asynchronous writing capabilities using a background thread. It extends queued_writer_base to share common queue management logic with batch_writer.
Category: Asynchronous (non-blocking), Decorator (wraps another writer)
Definition at line 37 of file async_writer.h.
|
private |
Definition at line 38 of file async_writer.h.
|
inlineexplicit |
Constructor accepting log_writer_interface (Decorator pattern)
| wrapped_writer | The writer to wrap with async functionality |
| queue_size | Maximum queue size for pending messages |
| flush_timeout | Maximum time to wait for flush operation (in seconds) |
Definition at line 47 of file async_writer.h.
|
inlineoverride |
Destructor.
Definition at line 58 of file async_writer.h.
References stop().

|
inlineoverridevirtual |
Flush all pending messages.
Implements kcenon::logger::log_writer_interface.
Definition at line 140 of file async_writer.h.
References kcenon::logger::log_writer_interface::flush(), flush_cv_, kcenon::logger::flush_timeout, flush_timeout_, kcenon::logger::make_logger_void_result(), kcenon::logger::queued_writer_base< std::queue< log_entry > >::queue_, kcenon::logger::queued_writer_base< std::queue< log_entry > >::queue_mutex_, running_, and kcenon::logger::decorator_writer_base::wrapped().

|
inlineprivate |
Flush any remaining messages after stopping.
Definition at line 227 of file async_writer.h.
References kcenon::logger::log_writer_interface::flush(), kcenon::logger::queued_writer_base< std::queue< log_entry > >::queue_, kcenon::logger::queued_writer_base< std::queue< log_entry > >::queue_mutex_, kcenon::logger::decorator_writer_base::wrapped(), and kcenon::logger::log_writer_interface::write().

|
inlineoverridevirtual |
Get the name of this writer.
Implements kcenon::logger::log_writer_interface.
Definition at line 174 of file async_writer.h.
References kcenon::logger::log_writer_interface::get_name(), and kcenon::logger::decorator_writer_base::wrapped().

|
inlineoverrideprotectedvirtual |
Handle queue overflow.
| entry | The entry that couldn't be enqueued |
Reimplemented from kcenon::logger::queued_writer_base< std::queue< log_entry > >.
Definition at line 184 of file async_writer.h.
References kcenon::logger::make_logger_void_result(), and kcenon::logger::queue_full.

|
inlineoverridevirtual |
Check if the writer is healthy.
Implements kcenon::logger::log_writer_interface.
Definition at line 166 of file async_writer.h.
References kcenon::logger::log_writer_interface::is_healthy(), running_, and kcenon::logger::decorator_writer_base::wrapped().

|
inlineoverrideprotectedvirtual |
Called after entry is enqueued - notifies worker thread.
Reimplemented from kcenon::logger::queued_writer_base< std::queue< log_entry > >.
Definition at line 191 of file async_writer.h.
References queue_cv_.
|
inlineprivate |
Process messages from the queue.
Definition at line 199 of file async_writer.h.
References flush_cv_, kcenon::logger::queued_writer_base< std::queue< log_entry > >::queue_, queue_cv_, kcenon::logger::queued_writer_base< std::queue< log_entry > >::queue_mutex_, running_, kcenon::logger::decorator_writer_base::wrapped(), and kcenon::logger::log_writer_interface::write().
Referenced by start().


|
inline |
Start the async writer thread.
Definition at line 65 of file async_writer.h.
References process_messages(), running_, and worker_thread_.

|
inline |
Stop the async writer thread.
| force_flush | If true, process all remaining messages before stopping |
Definition at line 88 of file async_writer.h.
References kcenon::logger::queued_writer_base< std::queue< log_entry > >::queue_, queue_cv_, kcenon::logger::queued_writer_base< std::queue< log_entry > >::queue_mutex_, running_, and worker_thread_.
Referenced by ~async_writer().

|
inlineoverridevirtual |
Write a log entry asynchronously.
| entry | The log entry to write |
Implements kcenon::logger::decorator_writer_base.
Definition at line 127 of file async_writer.h.
References running_, kcenon::logger::queued_writer_base< std::queue< log_entry > >::try_enqueue(), kcenon::logger::decorator_writer_base::wrapped(), and kcenon::logger::log_writer_interface::write().

|
private |
Definition at line 240 of file async_writer.h.
Referenced by flush(), and process_messages().
|
private |
Definition at line 237 of file async_writer.h.
Referenced by flush().
|
private |
Definition at line 239 of file async_writer.h.
Referenced by on_entry_enqueued(), process_messages(), and stop().
|
private |
Definition at line 242 of file async_writer.h.
Referenced by flush(), is_healthy(), process_messages(), start(), stop(), and write().
|
private |
Definition at line 243 of file async_writer.h.