|
Logger System 0.1.3
High-performance C++20 thread-safe logging system with asynchronous capabilities
|
Main logger implementation providing high-performance logging facilities. More...
#include <logger.h>


Classes | |
| class | impl |
Public Member Functions | |
| logger (bool async=true, std::size_t buffer_size=8192, std::unique_ptr< backends::integration_backend > backend=nullptr) | |
| Constructor with optional configuration. | |
| ~logger () | |
| Destructor - ensures all logs are flushed. | |
| common::VoidResult | log (common::interfaces::log_level level, const std::string &message) override |
| Log a message with specified level (ILogger interface) | |
| common::VoidResult | log (common::interfaces::log_level level, std::string_view message, const common::source_location &loc=common::source_location::current()) override |
| Log a message with source location (ILogger interface, C++20) | |
| common::VoidResult | log (const common::interfaces::log_entry &entry) override |
| Log a structured entry (ILogger interface) | |
| bool | is_enabled (common::interfaces::log_level level) const override |
| Check if logging is enabled for the specified level (ILogger interface) | |
| common::VoidResult | set_level (common::interfaces::log_level level) override |
| Set the minimum log level (ILogger interface) | |
| common::interfaces::log_level | get_level () const override |
| Get the current minimum log level (ILogger interface) | |
| common::VoidResult | flush () override |
| Flush any buffered log messages (ILogger interface) | |
| common::VoidResult | add_writer (log_writer_ptr writer) |
| common::VoidResult | clear_writers () |
| Remove all writers. | |
| common::VoidResult | start () |
| common::VoidResult | stop () |
| Stop the logger. | |
| bool | is_running () const |
| Check if logger is running. | |
| common::VoidResult | enable_metrics_collection (bool enable=true) |
| Enable or disable metrics collection. | |
| bool | is_metrics_collection_enabled () const |
| Check if metrics collection is enabled. | |
| result< metrics::logger_performance_stats > | get_current_metrics () const |
| Get current performance metrics. | |
| result< std::unique_ptr< metrics::logger_performance_stats > > | get_metrics_history (std::chrono::seconds duration) const |
| Get metrics history for a specific duration. | |
| common::VoidResult | reset_metrics () |
| Reset performance metrics. | |
| logger_metrics_collector * | get_metrics_collector () |
| Get metrics collector for direct access. | |
| common::VoidResult | add_writer (const std::string &name, log_writer_ptr writer) |
| Add a writer with a specific name. | |
| bool | remove_writer (const std::string &name) |
| Remove a writer by name. | |
| log_writer_interface * | get_writer (const std::string &name) |
| Get a writer by name. | |
| void | set_filter (std::unique_ptr< log_filter_interface > filter) |
| bool | has_filter () const |
| Check if a filter is currently set. | |
| log_router & | get_router () |
| const log_router & | get_router () const |
| Get the log router (const version) | |
| void | set_router (std::unique_ptr< log_router > router) |
| Set a new log router. | |
| bool | has_routing () const |
| Check if routing is enabled. | |
| structured_log_builder | log_structured (log_level level) |
| unified_log_context & | context () |
| const unified_log_context & | context () const |
| Get the unified context for this logger (const version) | |
| void | set_sampler (std::unique_ptr< sampling::log_sampler > sampler) |
| sampling::log_sampler * | get_sampler () |
| Get the log sampler (if set) | |
| const sampling::log_sampler * | get_sampler () const |
| Get the log sampler (const version) | |
| bool | has_sampling () const |
| Check if sampling is enabled. | |
| sampling::sampling_stats | get_sampling_stats () const |
| Get sampling statistics. | |
| void | reset_sampling_stats () |
| Reset sampling statistics. | |
| int | get_emergency_fd () const override |
| Get file descriptor for emergency writing. | |
| const char * | get_emergency_buffer () const override |
| Get emergency buffer pointer. | |
| size_t | get_emergency_buffer_size () const override |
| Get emergency buffer size. | |
Public Member Functions inherited from kcenon::logger::security::critical_logger_interface | |
| virtual | ~critical_logger_interface ()=default |
Private Attributes | |
| std::unique_ptr< impl > | pimpl_ |
Main logger implementation providing high-performance logging facilities.
The logger class provides a high-performance, thread-safe logging system with:
The logger uses the PIMPL idiom to hide implementation details and maintain ABI stability. Implements common::interfaces::ILogger for standardized logging interface (Phase 2) and common::interfaces::IMonitorable for observability (Phase 2.2). Can be adapted to legacy thread_system interfaces through dedicated adapter classes.
|
explicit |
Constructor with optional configuration.
| async | Enable asynchronous logging (default: true) |
| buffer_size | Size of the log buffer in bytes (default: 8192) |
| backend | Integration backend for level conversion (default: auto-detect) |
Creates a logger instance with the specified configuration. In async mode, a background thread is created to process log messages, providing better performance for high-throughput applications.
If no backend is specified, the logger will auto-detect the appropriate backend based on compile-time flags (USE_THREAD_SYSTEM_INTEGRATION).
Definition at line 211 of file logger.cpp.
| kcenon::logger::logger::~logger | ( | ) |
Destructor - ensures all logs are flushed.
Properly shuts down the logger, ensuring all buffered messages are written to their destinations before destruction. Automatically calls stop() and flush() if the logger is still running.
Definition at line 216 of file logger.cpp.
References pimpl_, and stop().

| common::VoidResult kcenon::logger::logger::add_writer | ( | const std::string & | name, |
| log_writer_ptr | writer ) |
Add a writer with a specific name.
| name | Name for the writer (used for later retrieval/removal) |
| writer | Unique pointer to the writer |
Adds a writer with an associated name for later lookup or removal. The writer is also added to the general writers list.
Definition at line 282 of file logger.cpp.
References kcenon::logger::invalid_argument, kcenon::logger::invalid_configuration, kcenon::common::ok(), and pimpl_.

| common::VoidResult kcenon::logger::logger::add_writer | ( | log_writer_ptr | writer | ) |
Definition at line 265 of file logger.cpp.
References kcenon::common::ok(), and pimpl_.
Referenced by example_basic_critical_writer(), example_error_handling(), example_hybrid_writer(), example_production_scenarios(), example_production_setup(), and example_write_ahead_logging().


| common::VoidResult kcenon::logger::logger::clear_writers | ( | ) |
Remove all writers.
Removes all currently registered writers from the logger. After this call, log messages will not be output anywhere until new writers are added.
Definition at line 314 of file logger.cpp.
References kcenon::common::ok(), and pimpl_.

|
nodiscard |
Definition at line 769 of file logger.cpp.
References pimpl_.
Referenced by kcenon::logger::log_context_scope::log_context_scope(), kcenon::logger::log_context_scope::remove_logger_context(), kcenon::logger::scoped_context_guard::set(), kcenon::logger::scoped_context_guard::set_otel(), kcenon::logger::scoped_context_guard::set_request(), kcenon::logger::scoped_context_guard::set_trace(), and kcenon::logger::scoped_context_guard::~scoped_context_guard().

|
nodiscard |
Get the unified context for this logger (const version)
Definition at line 774 of file logger.cpp.
References pimpl_.
| common::VoidResult kcenon::logger::logger::enable_metrics_collection | ( | bool | enable = true | ) |
Enable or disable metrics collection.
| enable | true to enable metrics collection |
Definition at line 603 of file logger.cpp.
References kcenon::logger::metrics::g_logger_stats, kcenon::logger::invalid_argument, kcenon::logger::make_logger_void_result(), kcenon::common::ok(), pimpl_, and kcenon::logger::metrics::logger_performance_stats::reset().

|
override |
Flush any buffered log messages (ILogger interface)
Definition at line 574 of file logger.cpp.
References kcenon::logger::invalid_configuration, kcenon::common::ok(), and pimpl_.
Referenced by example_production_scenarios(), example_production_setup(), kcenon::logger::adapters::logger_adapter::flush(), kcenon::logger::adapters::logger_adapter::shutdown(), and stop().


| result< logger_metrics > kcenon::logger::logger::get_current_metrics | ( | ) | const |
Get current performance metrics.
Definition at line 620 of file logger.cpp.
References kcenon::logger::metrics::g_logger_stats, kcenon::logger::invalid_argument, kcenon::logger::result< T >::ok_value(), and pimpl_.

|
overridevirtual |
Get emergency buffer pointer.
This method must be signal-safe. The buffer contains pending log messages that should be flushed in case of emergency shutdown.
Implements kcenon::logger::security::critical_logger_interface.
Definition at line 647 of file logger.cpp.
References pimpl_.
|
overridevirtual |
Get emergency buffer size.
This method must be signal-safe.
Implements kcenon::logger::security::critical_logger_interface.
Definition at line 654 of file logger.cpp.
References pimpl_.
|
overridevirtual |
Get file descriptor for emergency writing.
This method provides a file descriptor for signal-safe emergency writing. It must be signal-safe (no allocations, no locks).
Implements kcenon::logger::security::critical_logger_interface.
Definition at line 640 of file logger.cpp.
References pimpl_.
|
override |
Get the current minimum log level (ILogger interface)
Definition at line 567 of file logger.cpp.
References pimpl_.
Referenced by kcenon::logger::adapters::logger_adapter::get_level().

| logger_metrics_collector * kcenon::logger::logger::get_metrics_collector | ( | ) |
Get metrics collector for direct access.
| result< std::unique_ptr< metrics::logger_performance_stats > > kcenon::logger::logger::get_metrics_history | ( | std::chrono::seconds | duration | ) | const |
Get metrics history for a specific duration.
| duration | How far back to retrieve metrics |
| log_router & kcenon::logger::logger::get_router | ( | ) |
| const log_router & kcenon::logger::logger::get_router | ( | ) | const |
Get the log router (const version)
Definition at line 688 of file logger.cpp.
References pimpl_.
|
nodiscard |
Get the log sampler (if set)
Definition at line 829 of file logger.cpp.
References pimpl_.
|
nodiscard |
Get the log sampler (const version)
Definition at line 837 of file logger.cpp.
References pimpl_.
|
nodiscard |
Get sampling statistics.
Definition at line 853 of file logger.cpp.
References pimpl_.
| log_writer_interface * kcenon::logger::logger::get_writer | ( | const std::string & | name | ) |
Get a writer by name.
| name | Name of the writer |
Definition at line 359 of file logger.cpp.
References pimpl_.
| bool kcenon::logger::logger::has_filter | ( | ) | const |
Check if a filter is currently set.
Definition at line 670 of file logger.cpp.
References pimpl_.
| bool kcenon::logger::logger::has_routing | ( | ) | const |
Check if routing is enabled.
Definition at line 703 of file logger.cpp.
References pimpl_.
|
nodiscard |
Check if sampling is enabled.
Definition at line 845 of file logger.cpp.
References pimpl_.
|
override |
Check if logging is enabled for the specified level (ILogger interface)
| level | Log level to check using common::interfaces::log_level |
Definition at line 551 of file logger.cpp.
References pimpl_.
| bool kcenon::logger::logger::is_metrics_collection_enabled | ( | ) | const |
Check if metrics collection is enabled.
Definition at line 616 of file logger.cpp.
References pimpl_.
| bool kcenon::logger::logger::is_running | ( | ) | const |
Check if logger is running.
In async mode, returns true if the background processing thread is active. In sync mode, always returns true.
Definition at line 261 of file logger.cpp.
References pimpl_.
|
override |
Log a message with specified level (ILogger interface)
| level | Log level using common::interfaces::log_level |
| message | Log message |
Definition at line 378 of file logger.cpp.
References kcenon::common::ok(), pimpl_, and kcenon::logger::metrics::record_message_logged().
Referenced by example_basic_critical_writer(), example_error_handling(), example_hybrid_writer(), example_production_scenarios(), example_production_setup(), example_write_ahead_logging(), generate_logs(), kcenon::logger::adapters::logger_adapter::log(), kcenon::logger::adapters::logger_adapter::log(), kcenon::logger::core::filtered_logger< MinLevel >::log(), kcenon::logger::core::filtered_logger< MinLevel >::log(), kcenon::logger::adapters::logger_adapter::log_entry(), and kcenon::logger::adapters::logger_adapter::log_with_location().


|
override |
Log a message with source location (ILogger interface, C++20)
| level | Log level |
| message | Log message (string_view for efficiency) |
| loc | Source location (automatically captured at call site) |
Definition at line 423 of file logger.cpp.
References kcenon::common::ok(), pimpl_, and kcenon::logger::metrics::record_message_logged().

|
override |
Log a structured entry (ILogger interface)
| entry | Log entry containing all information |
Definition at line 489 of file logger.cpp.
References kcenon::common::ok(), pimpl_, and kcenon::logger::metrics::record_message_logged().

|
nodiscard |
Definition at line 717 of file logger.cpp.
References pimpl_.
| bool kcenon::logger::logger::remove_writer | ( | const std::string & | name | ) |
Remove a writer by name.
| name | Name of the writer to remove |
Definition at line 330 of file logger.cpp.
References pimpl_.
| common::VoidResult kcenon::logger::logger::reset_metrics | ( | ) |
Reset performance metrics.
| void kcenon::logger::logger::reset_sampling_stats | ( | ) |
| void kcenon::logger::logger::set_filter | ( | std::unique_ptr< log_filter_interface > | filter | ) |
|
override |
Set the minimum log level (ILogger interface)
| level | Minimum level for messages to be logged |
Definition at line 555 of file logger.cpp.
References kcenon::logger::invalid_configuration, kcenon::common::ok(), and pimpl_.
Referenced by kcenon::logger::adapters::logger_adapter::set_level(), and kcenon::logger::adapters::logger_adapter::set_level().


| void kcenon::logger::logger::set_router | ( | std::unique_ptr< log_router > | router | ) |
Set a new log router.
| router | Router to use |
Replaces the current router with the provided one. Useful for setting up a pre-configured router.
Definition at line 696 of file logger.cpp.
References pimpl_.
| void kcenon::logger::logger::set_sampler | ( | std::unique_ptr< sampling::log_sampler > | sampler | ) |
| common::VoidResult kcenon::logger::logger::start | ( | ) |
Definition at line 222 of file logger.cpp.
References kcenon::common::ok(), and pimpl_.

| common::VoidResult kcenon::logger::logger::stop | ( | ) |
Stop the logger.
Stops the background processing thread and flushes all pending messages. This is a blocking operation that waits for all queued messages to be processed.
Definition at line 245 of file logger.cpp.
References flush(), kcenon::common::ok(), and pimpl_.
Referenced by ~logger().


|
private |
Definition at line 757 of file logger.h.
Referenced by add_writer(), add_writer(), clear_writers(), context(), context(), enable_metrics_collection(), flush(), get_current_metrics(), get_emergency_buffer(), get_emergency_buffer_size(), get_emergency_fd(), get_level(), get_router(), get_router(), get_sampler(), get_sampler(), get_sampling_stats(), get_writer(), has_filter(), has_routing(), has_sampling(), is_enabled(), is_metrics_collection_enabled(), is_running(), log(), log(), log(), log_structured(), remove_writer(), reset_sampling_stats(), set_filter(), set_level(), set_router(), set_sampler(), start(), stop(), and ~logger().