Logger System 0.1.3
High-performance C++20 thread-safe logging system with asynchronous capabilities
Loading...
Searching...
No Matches
logger_registry.cpp
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
6#include <algorithm>
7#include <mutex>
8#include <shared_mutex>
9
10namespace kcenon::logger::core {
11
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}
26
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}
41
43 -> std::vector<security::critical_logger_interface*>
44{
45 std::shared_lock lock(mutex_);
46 return loggers_;
47}
48
50{
51 std::shared_lock lock(mutex_);
52 return loggers_.empty();
53}
54
56{
57 std::shared_lock lock(mutex_);
58 return loggers_.size();
59}
60
61} // namespace kcenon::logger::core
void register_logger(security::critical_logger_interface *log)
Register a logger for tracking.
bool empty() const
Check if registry is empty.
auto get_registered_loggers() const -> std::vector< security::critical_logger_interface * >
Get all registered loggers.
void unregister_logger(security::critical_logger_interface *log)
Unregister a logger.
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)
size_t size() const
Get number of registered loggers.
Interface for loggers that support emergency flushing.
Manages logger registration and tracking.