|
Common System 0.2.0
Common interfaces and patterns for system integration
|
Thread-safe singleton registry for managing logger instances. More...
#include <global_logger_registry.h>


Public Member Functions | |
| GlobalLoggerRegistry (const GlobalLoggerRegistry &)=delete | |
| GlobalLoggerRegistry & | operator= (const GlobalLoggerRegistry &)=delete |
| GlobalLoggerRegistry (GlobalLoggerRegistry &&)=delete | |
| GlobalLoggerRegistry & | operator= (GlobalLoggerRegistry &&)=delete |
| VoidResult | register_logger (const std::string &name, std::shared_ptr< ILogger > logger) override |
| Register a logger with a name. | |
| std::shared_ptr< ILogger > | get_logger (const std::string &name) override |
| Get a logger by name. | |
| VoidResult | unregister_logger (const std::string &name) override |
| Remove a logger by name. | |
| std::shared_ptr< ILogger > | get_default_logger () override |
| Get the default logger. | |
| VoidResult | set_default_logger (std::shared_ptr< ILogger > logger) override |
| Set the default logger. | |
| VoidResult | register_factory (const std::string &name, LoggerFactory factory) |
| Register a factory for lazy logger creation. | |
| VoidResult | set_default_factory (LoggerFactory factory) |
| Set a factory for the default logger. | |
| bool | has_logger (const std::string &name) const |
| Check if a logger is registered. | |
| bool | has_default_logger () const |
| Check if a default logger is available. | |
| void | clear () |
| Clear all registered loggers and factories. | |
| size_t | size () const |
| Get the number of registered loggers. | |
| void | freeze () |
| Freeze the registry to prevent further modifications. | |
| bool | is_frozen () const |
| Check if the registry is frozen. | |
Public Member Functions inherited from kcenon::common::interfaces::ILoggerRegistry | |
| virtual | ~ILoggerRegistry ()=default |
| virtual | ~ILoggerRegistry ()=default |
Static Public Member Functions | |
| static GlobalLoggerRegistry & | instance () |
| Get the singleton instance of GlobalLoggerRegistry. | |
| static std::shared_ptr< ILogger > | null_logger () |
| Get the shared NullLogger instance. | |
Private Member Functions | |
| GlobalLoggerRegistry ()=default | |
| ~GlobalLoggerRegistry ()=default | |
| std::shared_ptr< ILogger > | create_from_factory (const std::string &name) |
| Create logger from factory if available. | |
| std::shared_ptr< ILogger > | create_default_from_factory () |
| Create default logger from factory if available. | |
Private Attributes | |
| std::shared_mutex | mutex_ |
| std::unordered_map< std::string, std::shared_ptr< ILogger > > | loggers_ |
| std::unordered_map< std::string, LoggerFactory > | factories_ |
| std::shared_ptr< ILogger > | default_logger_ |
| LoggerFactory | default_factory_ |
| std::atomic< bool > | frozen_ {false} |
Thread-safe singleton registry for managing logger instances.
GlobalLoggerRegistry implements the ILoggerRegistry interface and provides:
This class resolves the circular dependency between thread_system and logger_system by providing a centralized, decoupled logging registry that can be accessed from any subsystem without creating direct dependencies.
Usage Example:
Definition at line 128 of file global_logger_registry.h.
|
delete |
|
delete |
|
privatedefault |
|
privatedefault |
|
inline |
Clear all registered loggers and factories.
Removes all registered loggers, factories, and the default logger. Useful for testing or application shutdown.
Definition at line 643 of file global_logger_registry.h.
References kcenon::common::interfaces::clear_loggers, kcenon::common::source_location::current(), default_factory_, default_logger_, factories_, is_frozen(), kcenon::common::interfaces::RegistryAuditLog::log_event(), loggers_, and mutex_.
Referenced by kcenon::common::bootstrap::SystemBootstrapper::clear_loggers().


|
inlineprivate |
Create default logger from factory if available.
Definition at line 707 of file global_logger_registry.h.
References default_factory_, default_logger_, and mutex_.
Referenced by get_default_logger().

|
inlineprivate |
Create logger from factory if available.
Internal helper that creates a logger using a registered factory and stores it in the logger map.
| name | Logger name |
| lock | Reference to held read lock (will be upgraded if needed) |
Definition at line 681 of file global_logger_registry.h.
References factories_, loggers_, and mutex_.
Referenced by get_logger().

|
inline |
Freeze the registry to prevent further modifications.
Once frozen, the registry cannot be modified (no registrations, unregistrations, or clears allowed). This is a one-way operation and cannot be undone.
Definition at line 669 of file global_logger_registry.h.
References kcenon::common::source_location::current(), kcenon::common::interfaces::freeze_logger_registry, frozen_, and kcenon::common::interfaces::RegistryAuditLog::log_event().
Referenced by kcenon::common::bootstrap::SystemBootstrapper::initialize().


|
inlineoverridevirtual |
Get the default logger.
Returns the default logger instance. If no default logger is set, returns a NullLogger instance.
Implements kcenon::common::interfaces::ILoggerRegistry.
Definition at line 463 of file global_logger_registry.h.
References create_default_from_factory(), default_logger_, mutex_, and null_logger().
Referenced by kcenon::common::interfaces::get_logger().


|
inlineoverridevirtual |
Get a logger by name.
Retrieves a logger registered under the specified name. If no logger is registered with that name but a factory exists, the factory will be invoked to create the logger (lazy initialization).
If no logger or factory is registered, returns a NullLogger instance.
| name | Logger name (case-sensitive) |
Implements kcenon::common::interfaces::ILoggerRegistry.
Definition at line 419 of file global_logger_registry.h.
References create_from_factory(), loggers_, mutex_, and null_logger().
Referenced by kcenon::common::interfaces::get_logger().


|
inline |
Check if a default logger is available.
Checks if a default logger or factory is registered.
Definition at line 638 of file global_logger_registry.h.
References default_factory_, default_logger_, and mutex_.
|
inline |
Check if a logger is registered.
Checks if a logger or factory is registered under the specified name.
| name | Logger name to check |
Definition at line 632 of file global_logger_registry.h.
References factories_, loggers_, and mutex_.
|
inlinestatic |
Get the singleton instance of GlobalLoggerRegistry.
Returns a reference to the application-wide singleton registry. Thread-safe for concurrent access.
Definition at line 352 of file global_logger_registry.h.
References GlobalLoggerRegistry(), and instance().
Referenced by kcenon::common::bootstrap::SystemBootstrapper::clear_loggers(), kcenon::common::interfaces::get_logger(), kcenon::common::interfaces::get_logger(), kcenon::common::interfaces::get_registry(), kcenon::common::bootstrap::SystemBootstrapper::initialize(), instance(), and kcenon::common::bootstrap::SystemBootstrapper::register_loggers().


|
inline |
Check if the registry is frozen.
Definition at line 677 of file global_logger_registry.h.
References frozen_.
Referenced by clear(), register_factory(), register_logger(), set_default_factory(), set_default_logger(), and unregister_logger().

|
inlinestatic |
Get the shared NullLogger instance.
Returns the singleton NullLogger instance used as a fallback when no logger is registered.
Definition at line 359 of file global_logger_registry.h.
Referenced by get_default_logger(), and get_logger().

|
delete |
|
delete |
|
inline |
Register a factory for lazy logger creation.
Registers a factory function that will be invoked when a logger with the specified name is first requested. This enables deferred initialization of loggers.
| name | Logger name (case-sensitive) |
| factory | Factory function that creates the logger |
Definition at line 519 of file global_logger_registry.h.
References kcenon::common::error_codes::ALREADY_EXISTS, kcenon::common::source_location::current(), factories_, kcenon::common::error_codes::INVALID_ARGUMENT, is_frozen(), kcenon::common::interfaces::RegistryAuditLog::log_event(), loggers_, kcenon::common::make_error(), mutex_, kcenon::common::Result< T >::ok(), kcenon::common::interfaces::register_factory, and kcenon::common::error_codes::REGISTRY_FROZEN.

|
inlineoverridevirtual |
Register a logger with a name.
Registers a logger instance under the specified name. If a logger with the same name already exists, it will be replaced.
| name | Logger name (case-sensitive) |
| logger | Logger instance to register |
Implements kcenon::common::interfaces::ILoggerRegistry.
Definition at line 367 of file global_logger_registry.h.
References kcenon::common::source_location::current(), factories_, kcenon::common::error_codes::INVALID_ARGUMENT, is_frozen(), kcenon::common::interfaces::RegistryAuditLog::log_event(), loggers_, kcenon::common::make_error(), mutex_, kcenon::common::Result< T >::ok(), kcenon::common::interfaces::register_logger, and kcenon::common::error_codes::REGISTRY_FROZEN.

|
inline |
Set a factory for the default logger.
Registers a factory function for creating the default logger. The factory will be invoked when get_default_logger() is called and no default logger has been set.
| factory | Factory function that creates the default logger |
Definition at line 583 of file global_logger_registry.h.
References kcenon::common::error_codes::ALREADY_EXISTS, kcenon::common::source_location::current(), default_factory_, default_logger_, kcenon::common::error_codes::INVALID_ARGUMENT, is_frozen(), kcenon::common::interfaces::RegistryAuditLog::log_event(), kcenon::common::make_error(), mutex_, kcenon::common::Result< T >::ok(), kcenon::common::error_codes::REGISTRY_FROZEN, and kcenon::common::interfaces::set_default_factory.

|
inlineoverridevirtual |
Set the default logger.
Sets the default logger instance. The default logger is used when no specific logger name is provided.
| logger | Logger instance to set as default |
Implements kcenon::common::interfaces::ILoggerRegistry.
Definition at line 482 of file global_logger_registry.h.
References kcenon::common::source_location::current(), default_factory_, default_logger_, kcenon::common::error_codes::INVALID_ARGUMENT, is_frozen(), kcenon::common::interfaces::RegistryAuditLog::log_event(), kcenon::common::make_error(), mutex_, kcenon::common::Result< T >::ok(), kcenon::common::error_codes::REGISTRY_FROZEN, and kcenon::common::interfaces::set_default_logger.

|
inline |
Get the number of registered loggers.
Returns the count of registered named loggers (not including the default logger).
Definition at line 664 of file global_logger_registry.h.
References factories_, loggers_, and mutex_.
|
inlineoverridevirtual |
Remove a logger by name.
Unregisters a logger from the registry. Also removes any associated factory if present.
| name | Logger name |
Implements kcenon::common::interfaces::ILoggerRegistry.
Definition at line 439 of file global_logger_registry.h.
References kcenon::common::source_location::current(), factories_, is_frozen(), kcenon::common::interfaces::RegistryAuditLog::log_event(), loggers_, kcenon::common::make_error(), mutex_, kcenon::common::Result< T >::ok(), kcenon::common::error_codes::REGISTRY_FROZEN, and kcenon::common::interfaces::unregister_logger.

|
private |
Definition at line 344 of file global_logger_registry.h.
Referenced by clear(), create_default_from_factory(), has_default_logger(), set_default_factory(), and set_default_logger().
|
private |
Definition at line 343 of file global_logger_registry.h.
Referenced by clear(), create_default_from_factory(), get_default_logger(), has_default_logger(), set_default_factory(), and set_default_logger().
|
private |
Definition at line 342 of file global_logger_registry.h.
Referenced by clear(), create_from_factory(), has_logger(), register_factory(), register_logger(), size(), and unregister_logger().
|
private |
Definition at line 345 of file global_logger_registry.h.
Referenced by freeze(), and is_frozen().
|
private |
Definition at line 341 of file global_logger_registry.h.
Referenced by clear(), create_from_factory(), get_logger(), has_logger(), register_factory(), register_logger(), size(), and unregister_logger().
|
mutableprivate |
Definition at line 340 of file global_logger_registry.h.
Referenced by clear(), create_default_from_factory(), create_from_factory(), get_default_logger(), get_logger(), has_default_logger(), has_logger(), register_factory(), register_logger(), set_default_factory(), set_default_logger(), size(), and unregister_logger().