Common System 0.2.0
Common interfaces and patterns for system integration
Loading...
Searching...
No Matches
logger.h
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
25#pragma once
26
27#include <concepts>
28#include <string>
29#include <string_view>
30#include <type_traits>
31
32namespace kcenon::common {
33
34// Forward declarations
35namespace interfaces {
36enum class log_level;
37struct log_entry;
38} // namespace interfaces
39
40namespace concepts {
41
57template <typename T>
58concept LogLevelEnumLike = std::is_enum_v<T>;
59
75template <typename T>
76concept BasicLogger = requires(T t,
78 const std::string& message) {
79 { t.log(level, message) };
80};
81
100template <typename T>
102 requires(T t, const T ct, interfaces::log_level level) {
103 { ct.is_enabled(level) } -> std::convertible_to<bool>;
104 { t.set_level(level) };
105 { ct.get_level() } -> std::convertible_to<interfaces::log_level>;
106 };
107
123template <typename T>
124concept FlushableLogger = BasicLogger<T> && requires(T t) {
125 { t.flush() };
126};
127
143template <typename T>
145 requires(T t, const interfaces::log_entry& entry) {
146 { t.log(entry) };
147 };
148
167template <typename T>
171
187template <typename T>
188concept LoggerProviderLike = requires(T t, const std::string& name) {
189 { t.get_logger() };
190 { t.create_logger(name) };
191};
192
209template <typename T>
210concept LoggerRegistryLike = requires(T t, const std::string& name) {
211 { t.register_logger(name, std::declval<std::shared_ptr<void>>()) };
212 { t.get_logger(name) };
213 { t.unregister_logger(name) };
214 { t.get_default_logger() };
215 { t.set_default_logger(std::declval<std::shared_ptr<void>>()) };
216};
217
218} // namespace concepts
219} // namespace kcenon::common
A type that provides basic logging functionality.
Definition logger.h:76
A type that supports flushing buffered log messages.
Definition logger.h:124
A type that supports log level filtering.
Definition logger.h:101
A type that represents log levels.
Definition logger.h:58
A complete logger type satisfying ILogger interface requirements.
Definition logger.h:168
A type that can provide logger instances.
Definition logger.h:188
A type that manages named logger instances.
Definition logger.h:210
A type that supports structured log entries.
Definition logger.h:144
log_level
Standard log levels.
Core interfaces.
Definition adapter.h:21