Common System 0.2.0
Common interfaces and patterns for system integration
Loading...
Searching...
No Matches
logging.cppm
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
14module;
15
16#include <iostream>
17#include <memory>
18#include <sstream>
19#include <string>
20#include <string_view>
21
22// Feature detection for source_location
23#if __has_include(<source_location>)
24 #include <source_location>
25 #define KCENON_MODULE_HAS_SOURCE_LOCATION 1
26#else
27 #define KCENON_MODULE_HAS_SOURCE_LOCATION 0
28#endif
29
30export module kcenon.common:logging;
31
32import :result.core;
33import :interfaces.logger;
34
35export namespace kcenon::common::logging {
36
37// ============================================================================
38// Convenience Log Functions
39// ============================================================================
40
44inline void log_trace(std::shared_ptr<interfaces::ILogger> logger, std::string_view message) {
45 if (logger && logger->is_enabled(interfaces::log_level::trace)) {
46 logger->log(interfaces::log_level::trace, message);
47 }
48}
49
53inline void log_debug(std::shared_ptr<interfaces::ILogger> logger, std::string_view message) {
54 if (logger && logger->is_enabled(interfaces::log_level::debug)) {
55 logger->log(interfaces::log_level::debug, message);
56 }
57}
58
62inline void log_info(std::shared_ptr<interfaces::ILogger> logger, std::string_view message) {
63 if (logger && logger->is_enabled(interfaces::log_level::info)) {
64 logger->log(interfaces::log_level::info, message);
65 }
66}
67
71inline void log_warning(std::shared_ptr<interfaces::ILogger> logger, std::string_view message) {
72 if (logger && logger->is_enabled(interfaces::log_level::warning)) {
73 logger->log(interfaces::log_level::warning, message);
74 }
75}
76
80inline void log_error(std::shared_ptr<interfaces::ILogger> logger, std::string_view message) {
81 if (logger && logger->is_enabled(interfaces::log_level::error)) {
82 logger->log(interfaces::log_level::error, message);
83 }
84}
85
89inline void log_critical(std::shared_ptr<interfaces::ILogger> logger, std::string_view message) {
90 if (logger && logger->is_enabled(interfaces::log_level::critical)) {
91 logger->log(interfaces::log_level::critical, message);
92 }
93}
94
95// ============================================================================
96// Console Logger (Simple Implementation)
97// ============================================================================
98
104public:
107
108 VoidResult log(interfaces::log_level level, const std::string& message) override {
109 if (!is_enabled(level)) {
110 return kcenon::common::ok();
111 }
112 std::cout << "[" << interfaces::to_string(level) << "] " << message << std::endl;
113 return kcenon::common::ok();
114 }
115
116 VoidResult log(const interfaces::log_entry& entry) override {
117 if (!is_enabled(entry.level)) {
118 return kcenon::common::ok();
119 }
120 std::cout << "[" << interfaces::to_string(entry.level) << "] "
121 << entry.message;
122 if (!entry.file.empty()) {
123 std::cout << " (" << entry.file << ":" << entry.line << ")";
124 }
125 std::cout << std::endl;
126 return kcenon::common::ok();
127 }
128
129 bool is_enabled(interfaces::log_level level) const override {
130 return static_cast<int>(level) >= static_cast<int>(level_);
131 }
132
134 level_ = level;
135 return kcenon::common::ok();
136 }
137
139 return level_;
140 }
141
142 VoidResult flush() override {
143 std::cout.flush();
144 return kcenon::common::ok();
145 }
146
147private:
149};
150
154inline std::shared_ptr<interfaces::ILogger> make_console_logger(
156 return std::make_shared<ConsoleLogger>(level);
157}
158
159} // namespace kcenon::common::logging
Result type for error handling with member function support.
Definition core.cppm:165
Standard interface for logging implementations.
Definition logger.cppm:95
Simple console logger implementation.
Definition logging.cppm:103
ConsoleLogger(interfaces::log_level level=interfaces::log_level::info)
Definition logging.cppm:105
VoidResult set_level(interfaces::log_level level) override
Set the minimum log level.
Definition logging.cppm:133
VoidResult log(interfaces::log_level level, const std::string &message) override
Log a message with specified level.
Definition logging.cppm:108
bool is_enabled(interfaces::log_level level) const override
Check if logging is enabled for the specified level.
Definition logging.cppm:129
VoidResult log(const interfaces::log_entry &entry) override
Log a structured entry.
Definition logging.cppm:116
VoidResult flush() override
Flush any buffered log messages.
Definition logging.cppm:142
interfaces::log_level get_level() const override
Get the current minimum log level.
Definition logging.cppm:138
std::string to_string(log_level level)
Convert log level to string.
log_level
Standard log levels.
VoidResult log_warning(std::string_view message, const source_location &loc=source_location::current())
Log a warning-level message.
VoidResult log_debug(std::string_view message, const source_location &loc=source_location::current())
Log a debug-level message.
VoidResult log_critical(std::string_view message, const source_location &loc=source_location::current())
Log a critical-level message.
VoidResult log_error(std::string_view message, const source_location &loc=source_location::current())
Log an error-level message.
std::shared_ptr< interfaces::ILogger > make_console_logger(interfaces::log_level level=interfaces::log_level::info)
Create a console logger.
Definition logging.cppm:154
VoidResult log_trace(std::string_view message, const source_location &loc=source_location::current())
Log a trace-level message.
VoidResult log_info(std::string_view message, const source_location &loc=source_location::current())
Log an info-level message.
VoidResult ok()
Create a successful void result.
Definition utilities.h:71
Standard log entry structure.
Definition logger.cppm:65
log_level level
int line
std::string message
std::string file