PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
ilogger.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2021-2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
18#pragma once
19
22
23#include <memory>
24#include <string_view>
25
27
28// =============================================================================
29// Logger Interface
30// =============================================================================
31
45class ILogger {
46public:
47 virtual ~ILogger() = default;
48
49 // =========================================================================
50 // Log Level Methods
51 // =========================================================================
52
57 virtual void trace(std::string_view message) = 0;
58
63 virtual void debug(std::string_view message) = 0;
64
69 virtual void info(std::string_view message) = 0;
70
75 virtual void warn(std::string_view message) = 0;
76
81 virtual void error(std::string_view message) = 0;
82
87 virtual void fatal(std::string_view message) = 0;
88
89 // =========================================================================
90 // Level Check
91 // =========================================================================
92
98 [[nodiscard]] virtual bool is_enabled(integration::log_level level) const noexcept = 0;
99
100 // =========================================================================
101 // Formatted Logging (Convenience Templates)
102 // =========================================================================
103
107 template <typename... Args>
110 trace(kcenon::pacs::compat::format(fmt, std::forward<Args>(args)...));
111 }
112 }
113
117 template <typename... Args>
120 debug(kcenon::pacs::compat::format(fmt, std::forward<Args>(args)...));
121 }
122 }
123
127 template <typename... Args>
130 info(kcenon::pacs::compat::format(fmt, std::forward<Args>(args)...));
131 }
132 }
133
137 template <typename... Args>
140 warn(kcenon::pacs::compat::format(fmt, std::forward<Args>(args)...));
141 }
142 }
143
147 template <typename... Args>
150 error(kcenon::pacs::compat::format(fmt, std::forward<Args>(args)...));
151 }
152 }
153
157 template <typename... Args>
160 fatal(kcenon::pacs::compat::format(fmt, std::forward<Args>(args)...));
161 }
162 }
163
164protected:
165 ILogger() = default;
166 ILogger(const ILogger&) = default;
167 ILogger& operator=(const ILogger&) = default;
168 ILogger(ILogger&&) = default;
169 ILogger& operator=(ILogger&&) = default;
170};
171
172// =============================================================================
173// Null Logger Implementation
174// =============================================================================
175
194class NullLogger final : public ILogger {
195public:
196 NullLogger() = default;
197 ~NullLogger() override = default;
198
199 void trace(std::string_view /*message*/) override {}
200 void debug(std::string_view /*message*/) override {}
201 void info(std::string_view /*message*/) override {}
202 void warn(std::string_view /*message*/) override {}
203 void error(std::string_view /*message*/) override {}
204 void fatal(std::string_view /*message*/) override {}
205
206 [[nodiscard]] bool is_enabled(integration::log_level /*level*/) const noexcept override {
207 return false;
208 }
209};
210
211// =============================================================================
212// Logger Service Implementation
213// =============================================================================
214
225class LoggerService final : public ILogger {
226public:
227 LoggerService() = default;
228 ~LoggerService() override = default;
229
230 void trace(std::string_view message) override {
232 }
233
234 void debug(std::string_view message) override {
236 }
237
238 void info(std::string_view message) override {
240 }
241
242 void warn(std::string_view message) override {
244 }
245
246 void error(std::string_view message) override {
248 }
249
250 void fatal(std::string_view message) override {
252 }
253
254 [[nodiscard]] bool is_enabled(integration::log_level level) const noexcept override {
256 }
257};
258
259// =============================================================================
260// Global Null Logger Instance
261// =============================================================================
262
271[[nodiscard]] inline std::shared_ptr<ILogger> null_logger() {
272 static auto instance = std::make_shared<NullLogger>();
273 return instance;
274}
275
276} // namespace kcenon::pacs::di
Abstract logger interface for dependency injection.
Definition ilogger.h:45
void debug_fmt(kcenon::pacs::compat::format_string< Args... > fmt, Args &&... args)
Log a formatted debug-level message.
Definition ilogger.h:118
virtual void warn(std::string_view message)=0
Log a warning-level message.
virtual void error(std::string_view message)=0
Log an error-level message.
virtual void fatal(std::string_view message)=0
Log a fatal-level message.
void trace_fmt(kcenon::pacs::compat::format_string< Args... > fmt, Args &&... args)
Log a formatted trace-level message.
Definition ilogger.h:108
virtual bool is_enabled(integration::log_level level) const noexcept=0
Check if a log level is enabled.
ILogger & operator=(ILogger &&)=default
void error_fmt(kcenon::pacs::compat::format_string< Args... > fmt, Args &&... args)
Log a formatted error-level message.
Definition ilogger.h:148
void info_fmt(kcenon::pacs::compat::format_string< Args... > fmt, Args &&... args)
Log a formatted info-level message.
Definition ilogger.h:128
ILogger & operator=(const ILogger &)=default
virtual ~ILogger()=default
ILogger(ILogger &&)=default
void fatal_fmt(kcenon::pacs::compat::format_string< Args... > fmt, Args &&... args)
Log a formatted fatal-level message.
Definition ilogger.h:158
virtual void info(std::string_view message)=0
Log an info-level message.
virtual void debug(std::string_view message)=0
Log a debug-level message.
ILogger(const ILogger &)=default
virtual void trace(std::string_view message)=0
Log a trace-level message.
void warn_fmt(kcenon::pacs::compat::format_string< Args... > fmt, Args &&... args)
Log a formatted warning-level message.
Definition ilogger.h:138
Default implementation of ILogger using logger_adapter.
Definition ilogger.h:225
void debug(std::string_view message) override
Log a debug-level message.
Definition ilogger.h:234
void warn(std::string_view message) override
Log a warning-level message.
Definition ilogger.h:242
bool is_enabled(integration::log_level level) const noexcept override
Check if a log level is enabled.
Definition ilogger.h:254
void error(std::string_view message) override
Log an error-level message.
Definition ilogger.h:246
void fatal(std::string_view message) override
Log a fatal-level message.
Definition ilogger.h:250
~LoggerService() override=default
void trace(std::string_view message) override
Log a trace-level message.
Definition ilogger.h:230
void info(std::string_view message) override
Log an info-level message.
Definition ilogger.h:238
No-op logger implementation for default injection.
Definition ilogger.h:194
void debug(std::string_view) override
Log a debug-level message.
Definition ilogger.h:200
void trace(std::string_view) override
Log a trace-level message.
Definition ilogger.h:199
~NullLogger() override=default
void warn(std::string_view) override
Log a warning-level message.
Definition ilogger.h:202
void fatal(std::string_view) override
Log a fatal-level message.
Definition ilogger.h:204
void info(std::string_view) override
Log an info-level message.
Definition ilogger.h:201
bool is_enabled(integration::log_level) const noexcept override
Check if a log level is enabled.
Definition ilogger.h:206
void error(std::string_view) override
Log an error-level message.
Definition ilogger.h:203
static void log(log_level level, const std::string &message)
Log a message at the specified level.
static auto is_level_enabled(log_level level) noexcept -> bool
Check if a log level is enabled.
Compatibility header providing kcenon::pacs::compat::format as an alias for std::format.
Adapter for DICOM audit logging using logger_system.
std::format_string< Args... > format_string
Definition format.h:31
std::shared_ptr< ILogger > null_logger()
Get a shared null logger instance.
Definition ilogger.h:271
log_level
Log severity levels.