Logger.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #ifndef CORE_LOGGER_H
  2. #define CORE_LOGGER_H
  3. #include "core/Check.h"
  4. #include "core/Terminal.h"
  5. typedef enum { LOG_NONE, LOG_ERROR, LOG_WARNING, LOG_INFO, LOG_DEBUG } LogLevel;
  6. extern LogLevel logLevel;
  7. typedef void (*ReportHandler)(
  8. LogLevel l, const char* file, int line, void* data, const char* message);
  9. check_format(4, 5) void callReportHandler(
  10. LogLevel l, const char* file, int line, const char* format, ...);
  11. void setReportHandler(ReportHandler h, void* data);
  12. #define REPORT(l, ...) callReportHandler(l, __FILE__, __LINE__, __VA_ARGS__)
  13. const char* getShortFileName(const char* s);
  14. check_format(6, 7) void printLog(
  15. LogLevel l, const char* file, int line, const char* prefix, const char* tag,
  16. const char* format, ...);
  17. #if defined(LOG_LEVEL) && LOG_LEVEL >= 1
  18. #define LOG_ERROR(...) \
  19. printLog( \
  20. LOG_ERROR, __FILE__, __LINE__, TERMINAL_BRIGHT_RED, "[ERROR] ", \
  21. __VA_ARGS__)
  22. #else
  23. #define LOG_ERROR(...)
  24. #endif
  25. #if defined(LOG_LEVEL) && LOG_LEVEL >= 2
  26. #define LOG_WARNING(...) \
  27. printLog( \
  28. LOG_WARNING, __FILE__, __LINE__, TERMINAL_BRIGHT_YELLOW, "[WARNING] ", \
  29. __VA_ARGS__)
  30. #else
  31. #define LOG_WARNING(...)
  32. #endif
  33. #if defined(LOG_LEVEL) && LOG_LEVEL >= 3
  34. #define LOG_INFO(...) \
  35. printLog( \
  36. LOG_INFO, __FILE__, __LINE__, TERMINAL_BOLD, "[INFO] ", __VA_ARGS__)
  37. #else
  38. #define LOG_INFO(...)
  39. #endif
  40. #if defined(LOG_LEVEL) && LOG_LEVEL >= 4
  41. #define LOG_DEBUG(...) \
  42. printLog( \
  43. LOG_DEBUG, __FILE__, __LINE__, TERMINAL_BOLD TERMINAL_BRIGHT_BLACK, \
  44. "[DEBUG] ", __VA_ARGS__)
  45. #else
  46. #define LOG_DEBUG(...)
  47. #endif
  48. #endif