|
Logger System 0.1.3
High-performance C++20 thread-safe logging system with asynchronous capabilities
|
Manager for safe signal handler installation. More...
#include <signal_manager.h>


Public Member Functions | |
| signal_manager ()=default | |
| Default constructor. | |
| ~signal_manager () override=default | |
| Destructor. | |
| void | register_logger (critical_logger_interface *log) override |
| Register a logger to receive signal notifications. | |
| void | unregister_logger (critical_logger_interface *log) override |
| Unregister a logger. | |
| bool | are_handlers_installed () const override |
| Check if signal handlers are installed. | |
| size_t | logger_count () const override |
| Get number of registered loggers. | |
| signal_manager (const signal_manager &)=delete | |
| signal_manager & | operator= (const signal_manager &)=delete |
| signal_manager (signal_manager &&)=delete | |
| signal_manager & | operator= (signal_manager &&)=delete |
Public Member Functions inherited from kcenon::logger::security::signal_manager_interface | |
| virtual | ~signal_manager_interface ()=default |
Private Member Functions | |
| void | install_handlers () |
| Install signal handlers. | |
| void | uninstall_handlers () |
| Uninstall signal handlers. | |
Static Private Member Functions | |
| static void | signal_handler (int sig) |
| Signal handler (must use only signal-safe functions) | |
| static void | emergency_flush (critical_logger_interface *log) |
| Emergency flush for a logger (signal-safe) | |
Private Attributes | |
| std::mutex | mutex_ |
| std::set< critical_logger_interface * > | loggers_ |
| std::atomic< bool > | handlers_installed_ {false} |
| void(* | original_sigsegv_ )(int) = SIG_DFL |
| void(* | original_sigabrt_ )(int) = SIG_DFL |
| void(* | original_sigterm_ )(int) = SIG_DFL |
| void(* | original_sigint_ )(int) = SIG_DFL |
Static Private Attributes | |
| static std::atomic< signal_manager * > | current_instance_ {nullptr} |
Manager for safe signal handler installation.
Features:
Definition at line 84 of file signal_manager.h.
|
default |
Default constructor.
|
overridedefault |
Destructor.
|
delete |
|
delete |
|
inlineoverridevirtual |
Check if signal handlers are installed.
Implements kcenon::logger::security::signal_manager_interface.
Definition at line 133 of file signal_manager.h.
|
inlinestaticprivate |
Emergency flush for a logger (signal-safe)
| log | Logger interface |
Definition at line 344 of file signal_manager.h.
References kcenon::logger::security::critical_logger_interface::get_emergency_buffer(), kcenon::logger::security::critical_logger_interface::get_emergency_buffer_size(), kcenon::logger::security::critical_logger_interface::get_emergency_fd(), kcenon::logger::security::detail::safe_fsync(), kcenon::logger::security::detail::safe_write(), and kcenon::logger::size.

|
inlineprivate |
Install signal handlers.
Definition at line 156 of file signal_manager.h.
|
inlineoverridevirtual |
Get number of registered loggers.
Implements kcenon::logger::security::signal_manager_interface.
Definition at line 140 of file signal_manager.h.
|
delete |
|
delete |
|
inlineoverridevirtual |
Register a logger to receive signal notifications.
| log | Logger interface for emergency flushing |
Signal handlers are installed when the first logger is registered.
Implements kcenon::logger::security::signal_manager_interface.
Definition at line 102 of file signal_manager.h.
|
inlinestaticprivate |
Signal handler (must use only signal-safe functions)
| sig | Signal number |
Signal-safe functions (POSIX):
NOT signal-safe:
Definition at line 198 of file signal_manager.h.
References loggers_, original_sigabrt_, original_sigint_, original_sigsegv_, and original_sigterm_.
|
inlineprivate |
Uninstall signal handlers.
Definition at line 172 of file signal_manager.h.
|
inlineoverridevirtual |
Unregister a logger.
| log | Logger to unregister |
Signal handlers are removed when the last logger is unregistered.
Implements kcenon::logger::security::signal_manager_interface.
Definition at line 119 of file signal_manager.h.
|
staticprivate |
Current instance for signal handler (static due to C signal API limitation) Note: Only one instance can handle signals at a time
Definition at line 297 of file signal_manager.h.
|
private |
Definition at line 301 of file signal_manager.h.
|
private |
Definition at line 300 of file signal_manager.h.
Referenced by signal_handler().
|
mutableprivate |
Definition at line 299 of file signal_manager.h.
|
private |
Definition at line 305 of file signal_manager.h.
Referenced by signal_handler().
|
private |
Definition at line 307 of file signal_manager.h.
Referenced by signal_handler().
|
private |
Definition at line 304 of file signal_manager.h.
Referenced by signal_handler().
|
private |
Definition at line 306 of file signal_manager.h.
Referenced by signal_handler().