Logger System 0.1.3
High-performance C++20 thread-safe logging system with asynchronous capabilities
Loading...
Searching...
No Matches
kcenon::logger::core::logger_registry Class Reference

Manages registration and unregistration of loggers. More...

#include <logger_registry.h>

Collaboration diagram for kcenon::logger::core::logger_registry:
Collaboration graph

Public Member Functions

 logger_registry ()=default
 Default constructor.
 
void register_logger (security::critical_logger_interface *log)
 Register a logger for tracking.
 
void unregister_logger (security::critical_logger_interface *log)
 Unregister a logger.
 
auto get_registered_loggers () const -> std::vector< security::critical_logger_interface * >
 Get all registered loggers.
 
bool empty () const
 Check if registry is empty.
 
size_t size () const
 Get number of registered loggers.
 

Private Attributes

std::vector< security::critical_logger_interface * > loggers_
 Registered loggers (using vector to preserve registration order)
 
std::shared_mutex mutex_
 Mutex for thread-safe access (shared for read, exclusive for write)
 

Detailed Description

Manages registration and unregistration of loggers.

This class handles a single responsibility: tracking registered loggers. It provides thread-safe registration/unregistration and query operations.

Thread Safety: All methods are thread-safe. Uses shared_mutex for reader-writer lock optimization (multiple readers, single writer).

Definition at line 39 of file logger_registry.h.

Constructor & Destructor Documentation

◆ logger_registry()

kcenon::logger::core::logger_registry::logger_registry ( )
default

Default constructor.

Member Function Documentation

◆ empty()

bool kcenon::logger::core::logger_registry::empty ( ) const

Check if registry is empty.

Returns
true if no loggers are registered

Definition at line 49 of file logger_registry.cpp.

50{
51 std::shared_lock lock(mutex_);
52 return loggers_.empty();
53}
std::vector< security::critical_logger_interface * > loggers_
Registered loggers (using vector to preserve registration order)
std::shared_mutex mutex_
Mutex for thread-safe access (shared for read, exclusive for write)

References loggers_, and mutex_.

◆ get_registered_loggers()

auto kcenon::logger::core::logger_registry::get_registered_loggers ( ) const -> std::vector<security::critical_logger_interface*>

Get all registered loggers.

Returns
Vector of registered logger pointers

Returns a snapshot of currently registered loggers. The returned vector is a copy and safe to iterate without holding locks.

Definition at line 42 of file logger_registry.cpp.

44{
45 std::shared_lock lock(mutex_);
46 return loggers_;
47}

References loggers_, and mutex_.

◆ register_logger()

void kcenon::logger::core::logger_registry::register_logger ( security::critical_logger_interface * log)

Register a logger for tracking.

Parameters
logLogger implementing critical_logger_interface

Adds the logger to the internal registry. If the logger is already registered, this is a no-op.

Definition at line 12 of file logger_registry.cpp.

13{
14 if (!log) {
15 return;
16 }
17
18 std::unique_lock lock(mutex_);
19
20 // Check if already registered
21 auto it = std::find(loggers_.begin(), loggers_.end(), log);
22 if (it == loggers_.end()) {
23 loggers_.push_back(log);
24 }
25}

References loggers_, and mutex_.

◆ size()

size_t kcenon::logger::core::logger_registry::size ( ) const

Get number of registered loggers.

Returns
Count of registered loggers

Definition at line 55 of file logger_registry.cpp.

56{
57 std::shared_lock lock(mutex_);
58 return loggers_.size();
59}

References loggers_, and mutex_.

◆ unregister_logger()

void kcenon::logger::core::logger_registry::unregister_logger ( security::critical_logger_interface * log)

Unregister a logger.

Parameters
logLogger to unregister

Removes the logger from the internal registry. If the logger is not registered, this is a no-op.

Definition at line 27 of file logger_registry.cpp.

28{
29 if (!log) {
30 return;
31 }
32
33 std::unique_lock lock(mutex_);
34
35 // Remove all instances (should be only one, but use remove to be safe)
36 loggers_.erase(
37 std::remove(loggers_.begin(), loggers_.end(), log),
38 loggers_.end()
39 );
40}

References loggers_, and mutex_.

Member Data Documentation

◆ loggers_

std::vector<security::critical_logger_interface*> kcenon::logger::core::logger_registry::loggers_
private

Registered loggers (using vector to preserve registration order)

Definition at line 87 of file logger_registry.h.

Referenced by empty(), get_registered_loggers(), register_logger(), size(), and unregister_logger().

◆ mutex_

std::shared_mutex kcenon::logger::core::logger_registry::mutex_
mutableprivate

Mutex for thread-safe access (shared for read, exclusive for write)

Definition at line 90 of file logger_registry.h.

Referenced by empty(), get_registered_loggers(), register_logger(), size(), and unregister_logger().


The documentation for this class was generated from the following files: