Thread System 0.3.1
High-performance C++20 thread pool with work stealing and DAG scheduling
Loading...
Searching...
No Matches
mock_logger.h
Go to the documentation of this file.
1#pragma once
2
3// BSD 3-Clause License
4// Copyright (c) 2025, 🍀☀🌕🌥 🌊
5// See the LICENSE file in the project root for full license information.
6
7#include <kcenon/common/interfaces/logger_interface.h>
8#include <kcenon/common/interfaces/global_logger_registry.h>
9#include <iostream>
10#include <mutex>
11#include <iomanip>
12#include <sstream>
13#include <chrono>
14
23class mock_logger : public kcenon::common::interfaces::ILogger {
24public:
25 using log_level = kcenon::common::interfaces::log_level;
26 using log_entry = kcenon::common::interfaces::log_entry;
27 using VoidResult = kcenon::common::VoidResult;
28 using source_location = kcenon::common::source_location;
29
31
32 VoidResult log(log_level level, const std::string& message) override {
33 if (!is_enabled(level)) {
34 return VoidResult::ok({});
35 }
36
37 std::lock_guard<std::mutex> lock(mutex_);
38 auto& stream = (level >= log_level::error) ? std::cerr : std::cout;
39
40 stream << "[" << format_time() << "] "
41 << "[" << level_to_string(level) << "] "
42 << message << std::endl;
43
44 return VoidResult::ok({});
45 }
46
48 std::string_view message,
49 const source_location& loc = source_location::current()) override {
50 if (!is_enabled(level)) {
51 return VoidResult::ok({});
52 }
53
54 std::lock_guard<std::mutex> lock(mutex_);
55 auto& stream = (level >= log_level::error) ? std::cerr : std::cout;
56
57 stream << "[" << format_time() << "] "
58 << "[" << level_to_string(level) << "] ";
59
60 std::string file = loc.file_name();
61 if (!file.empty()) {
62 size_t pos = file.find_last_of("/\\");
63 std::string filename = (pos != std::string::npos) ? file.substr(pos + 1) : file;
64 stream << filename << ":" << loc.line() << " (" << loc.function_name() << ") ";
65 }
66
67 stream << message << std::endl;
68
69 return VoidResult::ok({});
70 }
71
72 VoidResult log(const log_entry& entry) override {
73 if (!is_enabled(entry.level)) {
74 return VoidResult::ok({});
75 }
76
77 std::lock_guard<std::mutex> lock(mutex_);
78 auto& stream = (entry.level >= log_level::error) ? std::cerr : std::cout;
79
80 stream << "[" << format_time() << "] "
81 << "[" << level_to_string(entry.level) << "] ";
82
83 if (!entry.file.empty()) {
84 size_t pos = entry.file.find_last_of("/\\");
85 std::string filename = (pos != std::string::npos) ? entry.file.substr(pos + 1) : entry.file;
86 stream << filename << ":" << entry.line << " (" << entry.function << ") ";
87 }
88
89 stream << entry.message << std::endl;
90
91 return VoidResult::ok({});
92 }
93
94 bool is_enabled(log_level level) const override {
95 return static_cast<int>(level) >= static_cast<int>(min_level_);
96 }
97
98 VoidResult set_level(log_level level) override {
99 min_level_ = level;
100 return VoidResult::ok({});
101 }
102
103 log_level get_level() const override {
104 return min_level_;
105 }
106
107 VoidResult flush() override {
108 std::cout.flush();
109 std::cerr.flush();
110 return VoidResult::ok({});
111 }
112
113 void start() {
114 std::cout << "[MockLogger] Started" << std::endl;
115 }
116
117 void stop() {
118 flush();
119 std::cout << "[MockLogger] Stopped" << std::endl;
120 }
121
122private:
123 std::string format_time() const {
124 auto now = std::chrono::system_clock::now();
125 auto time_t = std::chrono::system_clock::to_time_t(now);
126 auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(
127 now.time_since_epoch()) % 1000;
128
129 std::ostringstream oss;
130 oss << std::put_time(std::localtime(&time_t), "%H:%M:%S");
131 oss << "." << std::setfill('0') << std::setw(3) << ms.count();
132 return oss.str();
133 }
134
135 std::string level_to_string(log_level level) const {
136 return std::string(kcenon::common::interfaces::to_string(level));
137 }
138
139private:
141 mutable std::mutex mutex_;
142};
Mock logger implementation for demonstration.
Definition mock_logger.h:23
VoidResult log(const log_entry &entry) override
Definition mock_logger.h:72
VoidResult flush() override
VoidResult log(log_level level, const std::string &message) override
Definition mock_logger.h:32
VoidResult set_level(log_level level) override
Definition mock_logger.h:98
kcenon::common::interfaces::log_entry log_entry
Definition mock_logger.h:26
kcenon::common::VoidResult VoidResult
Definition mock_logger.h:27
kcenon::common::interfaces::log_level log_level
Definition mock_logger.h:25
std::mutex mutex_
std::string level_to_string(log_level level) const
kcenon::common::source_location source_location
Definition mock_logger.h:28
log_level min_level_
std::string format_time() const
VoidResult log(log_level level, std::string_view message, const source_location &loc=source_location::current()) override
Definition mock_logger.h:47
bool is_enabled(log_level level) const override
Definition mock_logger.h:94
log_level get_level() const override