libmicroemu 0.2.0
ARM Microcontroller Emulator Library
Loading...
Searching...
No Matches
logger.h
1#pragma once
2#include <initializer_list>
3#include <iostream>
4#include <sstream>
5#include <string>
6
7namespace libmicroemu {
8
21
26
27public:
28 template <typename... Args> static void Info(const char *format, Args &&...args) noexcept {
29 if (callback_) {
30 callback_(LogLevel::kInfo, format, std::forward<Args>(args)...);
31 }
32 }
33 template <typename... Args> static void Debug(const char *format, Args &&...args) noexcept {
34 if (callback_) {
35 callback_(LogLevel::kDebug, format, std::forward<Args>(args)...);
36 }
37 }
38 template <typename... Args> static void Trace(const char *format, Args &&...args) noexcept {
39 if (callback_) {
40 callback_(LogLevel::kTrace, format, std::forward<Args>(args)...);
41 }
42 }
43 template <typename... Args> static void Warn(const char *format, Args &&...args) noexcept {
44 if (callback_) {
45 callback_(LogLevel::kWarn, format, std::forward<Args>(args)...);
46 }
47 }
48 template <typename... Args> static void Error(const char *format, Args &&...args) noexcept {
49 if (callback_) {
50 callback_(LogLevel::kError, format, std::forward<Args>(args)...);
51 }
52 }
53 template <typename... Args> static void Critical(const char *format, Args &&...args) noexcept {
54 if (callback_) {
55 callback_(LogLevel::kCritical, format, std::forward<Args>(args)...);
56 }
57 }
58
59 static void RegisterLoggerCallback(void (*callback)(libmicroemu::LogLevel level, const char *,
60 ...) noexcept) noexcept {
61 callback_ = callback;
62 };
63
64private:
65 static void (*callback_)(libmicroemu::LogLevel level, const char *, ...) noexcept;
66};
67
73public:
74 template <typename... Args> static void Info(const char *format, Args &&...args) noexcept {
75 static_cast<void>(format);
76 (void)std::initializer_list<int>{(static_cast<void>(args), 0)...}; // "Verbraucht" alle Args
77 }
78 template <typename... Args> static void Debug(const char *format, Args &&...args) noexcept {
79 static_cast<void>(format);
80 (void)std::initializer_list<int>{(static_cast<void>(args), 0)...};
81 }
82 template <typename... Args> static void Trace(const char *format, Args &&...args) noexcept {
83 static_cast<void>(format);
84 (void)std::initializer_list<int>{(static_cast<void>(args), 0)...};
85 }
86 template <typename... Args> static void Warn(const char *format, Args &&...args) noexcept {
87 static_cast<void>(format);
88 (void)std::initializer_list<int>{(static_cast<void>(args), 0)...};
89 }
90 template <typename... Args> static void Error(const char *format, Args &&...args) noexcept {
91 static_cast<void>(format);
92 (void)std::initializer_list<int>{(static_cast<void>(args), 0)...};
93 }
94 template <typename... Args> static void Critical(const char *format, Args &&...args) noexcept {
95 static_cast<void>(format);
96 (void)std::initializer_list<int>{(static_cast<void>(args), 0)...};
97 }
98};
99
100}; // namespace libmicroemu
101
102// ---------------------
103// LOGGER MACROS
104// ---------------------
105#if defined(LOGLEVEL_TRACE)
106#undef LOGLEVEL_TRACE
107#define LOGLEVEL_TRACE 1
108#define LOGLEVEL_DEBUG 1
109#define LOGLEVEL_INFO 1
110#define LOGLEVEL_WARN 1
111#define LOGLEVEL_ERROR 1
112#define LOGLEVEL_CRITICAL 1
113
114#elif defined(LOGLEVEL_DEBUG)
115#undef LOGLEVEL_DEBUG
116#define LOGLEVEL_TRACE 0
117#define LOGLEVEL_DEBUG 1
118#define LOGLEVEL_INFO 1
119#define LOGLEVEL_WARN 1
120#define LOGLEVEL_ERROR 1
121#define LOGLEVEL_CRITICAL 1
122
123#elif defined(LOGLEVEL_INFO)
124#undef LOGLEVEL_INFO
125#define LOGLEVEL_TRACE 0
126#define LOGLEVEL_DEBUG 0
127#define LOGLEVEL_INFO 1
128#define LOGLEVEL_WARN 1
129#define LOGLEVEL_ERROR 1
130#define LOGLEVEL_CRITICAL 1
131#elif defined(LOGLEVEL_WARN)
132#undef LOGLEVEL_WARN
133#define LOGLEVEL_TRACE 0
134#define LOGLEVEL_DEBUG 0
135#define LOGLEVEL_INFO 0
136#define LOGLEVEL_WARN 1
137#define LOGLEVEL_ERROR 1
138#define LOGLEVEL_CRITICAL 1
139#elif defined(LOGLEVEL_ERROR)
140#undef LOGLEVEL_ERROR
141#define LOGLEVEL_TRACE 0
142#define LOGLEVEL_DEBUG 0
143#define LOGLEVEL_INFO 0
144#define LOGLEVEL_WARN 0
145#define LOGLEVEL_ERROR 1
146#define LOGLEVEL_CRITICAL 1
147#else
148#define LOGLEVEL_TRACE 0
149#define LOGLEVEL_DEBUG 0
150#define LOGLEVEL_INFO 0
151#define LOGLEVEL_WARN 0
152#define LOGLEVEL_ERROR 0
153#define LOGLEVEL_CRITICAL 0
154#endif
155
156#if LOGLEVEL_TRACE == 1
157#define LOG_TRACE(CTX, ...) CTX::Trace(__VA_ARGS__)
158#define IS_LOGLEVEL_TRACE_ENABLED true
159#else
160#define LOG_TRACE(CTX, ...)
161#define IS_LOGLEVEL_TRACE_ENABLED false
162#endif
163
164#if LOGLEVEL_DEBUG == 1
165#define LOG_DEBUG(CTX, ...) CTX::Debug(__VA_ARGS__)
166#define IS_LOGLEVEL_DEBUG_ENABLED true
167#else
168#define LOG_DEBUG(CTX, ...)
169#define IS_LOGLEVEL_DEBUG_ENABLED false
170#endif
171
172#if LOGLEVEL_INFO == 1
173#define LOG_INFO(CTX, ...) CTX::Info(__VA_ARGS__)
174#define IS_LOGLEVEL_INFO_ENABLED true
175#else
176#define LOG_INFO(CTX, ...)
177#define IS_LOGLEVEL_INFO_ENABLED false
178#endif
179
180#if LOGLEVEL_WARN == 1
181#define LOG_WARN(CTX, ...) CTX::Warn(__VA_ARGS__)
182#define IS_LOGLEVEL_WARN_ENABLED true
183#else
184#define LOG_WARN(CTX, ...)
185#define IS_LOGLEVEL_WARN_ENABLED false
186#endif
187
188#if LOGLEVEL_ERROR == 1
189#define LOG_ERROR(CTX, ...) CTX::Error(__VA_ARGS__)
190#define IS_LOGLEVEL_ERROR_ENABLED true
191#else
192#define LOG_ERROR(CTX, ...)
193#define IS_LOGLEVEL_ERROR_ENABLED false
194#endif
195
196#if LOGLEVEL_CRITICAL == 1
197#define LOG_CRITICAL(CTX, ...) CTX::Critical(__VA_ARGS__)
198#define IS_LOGLEVEL_CRITICAL_ENABLED true
199#else
200#define LOG_CRITICAL(CTX, ...)
201#define IS_LOGLEVEL_CRITICAL_ENABLED false
202#endif
Null logger class Used to disable logging.
Definition logger.h:72
Static logger class.
Definition logger.h:25
The libmicroemu namespace contains all classes and functions of the libmicroemu which are public.
Definition bkpt_flags.h:6
LogLevel
Enum class for log levels Used to indicate the log level of a message.
Definition logger.h:13
@ kInfo
Info log level.
Definition logger.h:16
@ kCritical
Critical log level.
Definition logger.h:19
@ kWarn
Warn log level.
Definition logger.h:17
@ kDebug
Debug log level.
Definition logger.h:15
@ kError
Error log level.
Definition logger.h:18
@ kTrace
Trace log level.
Definition logger.h:14