swaglog.h 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #pragma once
  2. #include "common/timing.h"
  3. #define CLOUDLOG_DEBUG 10
  4. #define CLOUDLOG_INFO 20
  5. #define CLOUDLOG_WARNING 30
  6. #define CLOUDLOG_ERROR 40
  7. #define CLOUDLOG_CRITICAL 50
  8. #ifdef __GNUC__
  9. #define SWAG_LOG_CHECK_FMT(a, b) __attribute__ ((format (printf, a, b)))
  10. #else
  11. #define SWAG_LOG_CHECK_FMT(a, b)
  12. #endif
  13. void cloudlog_e(int levelnum, const char* filename, int lineno, const char* func,
  14. const char* fmt, ...) SWAG_LOG_CHECK_FMT(5, 6);
  15. void cloudlog_te(int levelnum, const char* filename, int lineno, const char* func,
  16. const char* fmt, ...) SWAG_LOG_CHECK_FMT(5, 6);
  17. void cloudlog_te(int levelnum, const char* filename, int lineno, const char* func,
  18. uint32_t frame_id, const char* fmt, ...) SWAG_LOG_CHECK_FMT(6, 7);
  19. #define cloudlog(lvl, fmt, ...) cloudlog_e(lvl, __FILE__, __LINE__, \
  20. __func__, \
  21. fmt, ## __VA_ARGS__)
  22. #define cloudlog_t(lvl, ...) cloudlog_te(lvl, __FILE__, __LINE__, \
  23. __func__, \
  24. __VA_ARGS__)
  25. #define cloudlog_rl(burst, millis, lvl, fmt, ...) \
  26. { \
  27. static uint64_t __begin = 0; \
  28. static int __printed = 0; \
  29. static int __missed = 0; \
  30. \
  31. int __burst = (burst); \
  32. int __millis = (millis); \
  33. uint64_t __ts = nanos_since_boot(); \
  34. \
  35. if (!__begin) { __begin = __ts; } \
  36. \
  37. if (__begin + __millis*1000000ULL < __ts) { \
  38. if (__missed) { \
  39. cloudlog(CLOUDLOG_WARNING, "cloudlog: %d messages suppressed", __missed); \
  40. } \
  41. __begin = 0; \
  42. __printed = 0; \
  43. __missed = 0; \
  44. } \
  45. \
  46. if (__printed < __burst) { \
  47. cloudlog(lvl, fmt, ## __VA_ARGS__); \
  48. __printed++; \
  49. } else { \
  50. __missed++; \
  51. } \
  52. }
  53. #define LOGT(...) cloudlog_t(CLOUDLOG_DEBUG, __VA_ARGS__)
  54. #define LOGD(fmt, ...) cloudlog(CLOUDLOG_DEBUG, fmt, ## __VA_ARGS__)
  55. #define LOG(fmt, ...) cloudlog(CLOUDLOG_INFO, fmt, ## __VA_ARGS__)
  56. #define LOGW(fmt, ...) cloudlog(CLOUDLOG_WARNING, fmt, ## __VA_ARGS__)
  57. #define LOGE(fmt, ...) cloudlog(CLOUDLOG_ERROR, fmt, ## __VA_ARGS__)
  58. #define LOGD_100(fmt, ...) cloudlog_rl(2, 100, CLOUDLOG_DEBUG, fmt, ## __VA_ARGS__)
  59. #define LOG_100(fmt, ...) cloudlog_rl(2, 100, CLOUDLOG_INFO, fmt, ## __VA_ARGS__)
  60. #define LOGW_100(fmt, ...) cloudlog_rl(2, 100, CLOUDLOG_WARNING, fmt, ## __VA_ARGS__)
  61. #define LOGE_100(fmt, ...) cloudlog_rl(2, 100, CLOUDLOG_ERROR, fmt, ## __VA_ARGS__)