log.hpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #ifndef AFUN_LOG_HPP
  2. #define AFUN_LOG_HPP
  3. #include <csetjmp>
  4. #include "aFunToolExport.h"
  5. #include "macro.hpp"
  6. #include "log_macro.hpp"
  7. enum LogLevel {
  8. log_track = 0,
  9. log_debug = 1,
  10. log_info = 2,
  11. log_warning = 3,
  12. log_error = 4,
  13. log_send_error = 5,
  14. log_fatal_error = 6,
  15. };
  16. typedef enum LogLevel LogLevel;
  17. enum LogFactoryPrintConsole {
  18. log_pc_all = 1,
  19. log_pc_w = 2,
  20. log_pc_e = 3,
  21. log_pc_quite = 4,
  22. };
  23. typedef enum LogFactoryPrintConsole LogFactoryPrintConsole;
  24. struct Logger {
  25. const char *id;
  26. LogLevel level;
  27. jmp_buf *buf;
  28. };
  29. typedef struct Logger Logger;
  30. AFUN_TOOL_EXPORT void printLogSystemInfo();
  31. AFUN_TOOL_EXPORT int initLogSystem(FilePath path, bool asyn);
  32. AFUN_TOOL_EXPORT int destructLogSystem();
  33. AFUN_TOOL_EXPORT void initLogger(Logger *logger, const char *id, LogLevel level);
  34. AFUN_TOOL_EXPORT void destructLogger(Logger *logger);
  35. AFUN_TOOL_EXPORT int writeTrackLog_(Logger *logger,
  36. const char *file, int line, const char *func,
  37. const char *format, ...);
  38. AFUN_TOOL_EXPORT int writeDebugLog_(Logger *logger,
  39. const char *file, int line, const char *func,
  40. const char *format, ...);
  41. AFUN_TOOL_EXPORT int writeInfoLog_(Logger *logger,
  42. const char *file, int line, const char *func,
  43. const char *format, ...);
  44. AFUN_TOOL_EXPORT int writeWarningLog_(Logger *logger,
  45. const char *file, int line, const char *func,
  46. const char *format, ...);
  47. AFUN_TOOL_EXPORT int writeErrorLog_(Logger *logger,
  48. const char *file, int line, const char *func,
  49. const char *format, ...);
  50. AFUN_TOOL_EXPORT int writeSendErrorLog_(Logger *logger,
  51. const char *file, int line, const char *func,
  52. const char *format, ...);
  53. AFUN_TOOL_EXPORT int writeFatalErrorLog_(Logger *logger,
  54. const char *file, int line, const char *func,
  55. int exit_code, const char *format, ...);
  56. #ifdef __FILENAME__
  57. #define file_line (char *)__FILENAME__ , (int)__LINE__
  58. #else
  59. #define file_line (char *)"xx", (int)__LINE__
  60. #endif
  61. #if aFunWriteTrack
  62. #define writeTrackLog(logger, ...) writeTrackLog_(logger, file_line, __FUNCTION__, __VA_ARGS__)
  63. #else
  64. #define writeTrackLog(logger, ...) (nullptr)
  65. #endif
  66. #if aFunWriteDebug
  67. #define writeDebugLog(logger, ...) writeDebugLog_(logger, file_line, __FUNCTION__, __VA_ARGS__)
  68. #define assertDebugLog(c, logger, ...) ((c) || writeDebugLog(logger, "Assert " #c " error : " __VA_ARGS__))
  69. #else
  70. #define writeDebugLog(logger, ...) (nullptr)
  71. #define assertDebugLog(c, logger, ...) (c)
  72. #endif
  73. #if aFunWriteInfo
  74. #define writeInfoLog(logger, ...) writeInfoLog_(logger, file_line, __FUNCTION__, __VA_ARGS__)
  75. #define assertInfoLog(c, logger, ...) ((c) || writeInfoLog(logger, "Assert " #c " error : " __VA_ARGS__))
  76. #else
  77. #define writeInfoLog(logger, ...) (nullptr)
  78. #define assertInfoLog(c, logger, ...) (c)
  79. #endif
  80. #if !aFunIgnoreWarning
  81. #define writeWarningLog(logger, ...) writeWarningLog_(logger, file_line, __FUNCTION__, __VA_ARGS__)
  82. #define assertWarningLog(c, logger, ...) ((c) || writeWarningLog(logger, "Assert " #c " error : " __VA_ARGS__))
  83. #else
  84. #define writeWarningLog(logger, ...) (nullptr)
  85. #define assertWarningLog(c, logger, ...) (c)
  86. #endif
  87. #if !aFunIgnoreError
  88. #define writeErrorLog(logger, ...) writeErrorLog_(logger, file_line, __FUNCTION__, __VA_ARGS__)
  89. #define assertErrorLog(c, logger, ...) ((c) || writeErrorLog(logger, "Assert " #c " error : " __VA_ARGS__))
  90. #else
  91. #define writeErrorLog(logger, ...) (nullptr)
  92. #define assertErrorLog(c, logger, ...) (c)
  93. #endif
  94. #if !aFunOFFAllLog
  95. #define writeSendErrorLog(logger, ...) writeSendErrorLog_(logger, file_line, __FUNCTION__, __VA_ARGS__)
  96. #define writeFatalErrorLog(logger, exit_code, ...) writeFatalErrorLog_(logger, file_line, __FUNCTION__, exit_code, __VA_ARGS__)
  97. #define assertSendErrorLog(c, logger, ...) ((c) || writeSendErrorLog(logger, "Assert " #c " error : " __VA_ARGS__))
  98. #define assertFatalErrorLog(c, logger, exit_code, ...) ((c) || writeFatalErrorLog(logger, exit_code, "Assert " #c " error : " __VA_ARGS__))
  99. #else
  100. #define writeSendErrorLog(logger, ...) (nullptr)
  101. #define writeFatalErrorLog(logger, exit_code, ...) (nullptr)
  102. #define assertSendErrorLog(c, logger, ...) (c)
  103. #define assertFatalErrorLog(c, logger, exit_code, ...) (c)
  104. #endif
  105. #endif //AFUN_LOG_HPP