66#include < functional>
77#include < time.h>
88
9- #define COLOR_RESET " \x1B [0m"
10- #define COLOR_BLACK " \x1B [0;30m"
11- #define COLOR_RED " \x1B [0;31m"
12- #define COLOR_GREEN " \x1B [0;32m"
13- #define COLOR_YELLOW " \x1B [0;33m"
14- #define COLOR_BLUE " \x1B [0;34m"
15- #define COLOR_MAGENTA " \x1B [0;35m"
16- #define COLOR_CYAN " \x1B [0;36m"
17- #define COLOR_WHITE " \x1B [0;37m"
9+ #define FSH_P const __FlashStringHelper*
1810
1911enum LogLevel { DEBUG = 0 , INFO = 1 , WARNING = 2 , ERROR = 3 };
2012
21- #define LOGF_D (fmt, ...) Logger::logf(LogLevel::DEBUG, PSTR (__FILE__), __LINE__, PSTR(fmt), ##__VA_ARGS__)
22- #define LOGF_I (fmt, ...) Logger::logf(LogLevel::INFO, PSTR (__FILE__), __LINE__, PSTR(fmt), ##__VA_ARGS__)
23- #define LOGF_W (fmt, ...) Logger::logf(LogLevel::WARNING, PSTR (__FILE__), __LINE__, PSTR(fmt), ##__VA_ARGS__)
24- #define LOGF_E (fmt, ...) Logger::logf(LogLevel::ERROR, PSTR (__FILE__), __LINE__, PSTR(fmt), ##__VA_ARGS__)
13+ #define LOGF_D (fmt, ...) Logger::logf(LogLevel::DEBUG, F (__FILE__), __LINE__, PSTR(fmt), ##__VA_ARGS__)
14+ #define LOGF_I (fmt, ...) Logger::logf(LogLevel::INFO, F (__FILE__), __LINE__, PSTR(fmt), ##__VA_ARGS__)
15+ #define LOGF_W (fmt, ...) Logger::logf(LogLevel::WARNING, F (__FILE__), __LINE__, PSTR(fmt), ##__VA_ARGS__)
16+ #define LOGF_E (fmt, ...) Logger::logf(LogLevel::ERROR, F (__FILE__), __LINE__, PSTR(fmt), ##__VA_ARGS__)
2517
26- #define LOG_D (msg ) Logger::log(LogLevel::DEBUG, PSTR (__FILE__), __LINE__, PSTR (msg))
27- #define LOG_I (msg ) Logger::log(LogLevel::INFO, PSTR (__FILE__), __LINE__, PSTR (msg))
28- #define LOG_W (msg ) Logger::log(LogLevel::WARNING, PSTR (__FILE__), __LINE__, PSTR (msg))
29- #define LOG_E (msg ) Logger::log(LogLevel::ERROR, PSTR (__FILE__), __LINE__, PSTR (msg))
18+ #define LOG_D (msg ) Logger::log(LogLevel::DEBUG, F (__FILE__), __LINE__, F (msg))
19+ #define LOG_I (msg ) Logger::log(LogLevel::INFO, F (__FILE__), __LINE__, F (msg))
20+ #define LOG_W (msg ) Logger::log(LogLevel::WARNING, F (__FILE__), __LINE__, F (msg))
21+ #define LOG_E (msg ) Logger::log(LogLevel::ERROR, F (__FILE__), __LINE__, F (msg))
3022
3123typedef size_t log_event_handler_id_t ;
32- typedef std::function<void (tm* time, LogLevel level, const char * file, const uint16_t line, const char * message)>
33- LogEventHandler;
24+ typedef std::function<void (tm* time, LogLevel level, String& file, int line, String& message)> LogEventHandler;
3425
3526typedef struct LogEventHandlerInfo {
3627 static log_event_handler_id_t currentEventHandlerId;
@@ -60,11 +51,11 @@ class Logger {
6051 }
6152 }
6253
63- static void log (LogLevel level, const char * file, int line, const char * message) {
54+ static void log (LogLevel level, FSH_P file, int line, FSH_P message) {
6455 logEvent (level, file, line, message);
6556 }
6657
67- static void logf (LogLevel level, const char * file, int line, PGM_P format, ...) {
58+ static void logf (LogLevel level, FSH_P file, int line, PGM_P format, ...) {
6859 va_list args;
6960
7061 // inital buffer, we can extend it if the formatted string doesn't fit
@@ -89,7 +80,7 @@ class Logger {
8980 }
9081
9182 // we failed to allocate
92- logEvent (level, file, line, PSTR (" Error formatting log message" ));
83+ logEvent (level, file, line, F (" Error formatting log message" ));
9384 }
9485
9586 private:
@@ -99,7 +90,7 @@ class Logger {
9990 // class is static-only, prevent instantiation
10091 }
10192
102- static void logEvent (LogLevel level, char const * file, int line, char const * message) {
93+ static void logEvent (LogLevel level, String file, int line, String message) {
10394 time_t now = time (nullptr );
10495 tm* time = localtime (&now);
10596 for (const LogEventHandlerInfo& eventHandler : _eventHandlers) {
0 commit comments