16#define __FILE_NAME__ (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)
19#if defined(ESP32) || defined(ESP8266)
20#define PRINT_TIME() {struct tm t; time_t now = time(nullptr); t = *localtime(&now); \
21char str[30]; strftime(str, sizeof(str), "%c", &t); Serial.print(str);}
23#define PRINT_TIME() Serial.print(millis());
27#define PRINT_FILE_LINE() {PRINT_TIME() Serial.print(" [");Serial.print(__FILE_NAME__); \
28Serial.print(":");Serial.print(__LINE__);Serial.print(" "); Serial.print(__FUNCTION__); Serial.print("()]\t");}
29#if defined(ESP32) || defined(ESP8266)
30#define log_debug(format, args...) { PRINT_FILE_LINE() Serial.printf(format, args); Serial.println();}
32#define log_debug(format, args...) { PRINT_FILE_LINE() char buf[250]; sprintf(buf, format, args); Serial.println(buf);}
35#define log_error(x) {PRINT_FILE_LINE() Serial.println(x);}
36#define log_info(x) { PRINT_FILE_LINE() Serial.println(x);}
37#define log_warning(args) { PRINT_FILE_LINE() Serial.print("-W-"); Serial.println(args);}
40#define debugJson(X, Y) { PRINT_FILE_LINE() Serial.println(); serializeJsonPretty(X, Y); Serial.println();}
41#define errorJson(E) { PRINT_FILE_LINE() Serial.println(); Serial.println(E); }
44#define log_debug(format, ...)
45#define log_warning(args)
49#define debugJson(X, Y)