|
4 | 4 |
|
5 | 5 | #include "../Config.h" |
6 | 6 |
|
| 7 | +enum class LogLevel { |
| 8 | + DEBUG, |
| 9 | + INFO, |
| 10 | + WARN, |
| 11 | + ERROR, |
| 12 | + NONE |
| 13 | +}; |
| 14 | + |
| 15 | +extern LogLevel currentLogLevel; |
| 16 | + |
7 | 17 | class Logger { |
8 | 18 | public: |
9 | | - template <typename T> |
10 | | - static void log(const T& msg) { |
11 | | -#ifdef DEBUG_MODE |
12 | | - Serial.print(msg); |
13 | | -#endif |
| 19 | + static void setLogLevel(LogLevel level) { |
| 20 | + currentLogLevel = level; |
14 | 21 | } |
15 | 22 |
|
16 | | - template <typename T> |
17 | | - static void logln(const T& msg) { |
| 23 | + static void log(LogLevel level, const char* file, int line, const char* func, const char* fmt, ...) __attribute__((format(printf, 5, 6))); |
| 24 | +}; |
| 25 | + |
18 | 26 | #ifdef DEBUG_MODE |
19 | | - Serial.println(msg); |
| 27 | + #define LOG_DEBUG(fmt, ...) Logger::log(LogLevel::DEBUG, __FILE__, __LINE__, __func__, fmt, ##__VA_ARGS__) |
| 28 | + #define LOG_INFO(fmt, ...) Logger::log(LogLevel::INFO, __FILE__, __LINE__, __func__, fmt, ##__VA_ARGS__) |
| 29 | + #define LOG_WARN(fmt, ...) Logger::log(LogLevel::WARN, __FILE__, __LINE__, __func__, fmt, ##__VA_ARGS__) |
| 30 | + #define LOG_ERROR(fmt, ...) Logger::log(LogLevel::ERROR, __FILE__, __LINE__, __func__, fmt, ##__VA_ARGS__) |
| 31 | +#else |
| 32 | + #define LOG_DEBUG(fmt, ...) ((void)0) |
| 33 | + #define LOG_INFO(fmt, ...) ((void)0) |
| 34 | + #define LOG_WARN(fmt, ...) ((void)0) |
| 35 | + #define LOG_ERROR(fmt, ...) ((void)0) |
20 | 36 | #endif |
21 | | - } |
22 | | -}; |
|
0 commit comments