log.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #ifndef AFUN_LOG_H
  2. #define AFUN_LOG_H
  3. #include <setjmp.h>
  4. #include "aFunToolExport.h"
  5. #include "macro.h"
  6. enum LogLevel {
  7. log_debug = 0,
  8. log_info = 1,
  9. log_warning = 2,
  10. log_error = 3,
  11. log_send_error = 4,
  12. log_fatal_error = 5,
  13. };
  14. typedef enum LogLevel LogLevel;
  15. enum LogFactoryPrintConsole {
  16. log_pc_all = 1,
  17. log_pc_w = 2,
  18. log_pc_e = 3,
  19. log_pc_quite = 4,
  20. };
  21. typedef enum LogFactoryPrintConsole LogFactoryPrintConsole;
  22. enum LogLoggerPrintConsole {
  23. log_default = 0, // 默认
  24. log_print_console, // 不显示到终端
  25. log_print_no_console, // 只显示到终端
  26. };
  27. typedef enum LogLoggerPrintConsole LogLoggerPrintConsole;
  28. struct Logger {
  29. char *id;
  30. LogLevel level;
  31. bool process_send_error; // 若为false则send_error转换为error
  32. bool process_fatal_error; // 若为false则fatal_error转换为error
  33. jmp_buf *buf;
  34. int exit_type; // 0-abort 其他值则为exit
  35. };
  36. typedef struct Logger Logger;
  37. AFUN_TOOL_EXPORT int initLogSystem(FilePath path, LogFactoryPrintConsole print_console);
  38. AFUN_TOOL_EXPORT void initLogger(Logger *logger, char *id, LogLevel level);
  39. AFUN_TOOL_EXPORT void destructLogger(Logger *logger);
  40. AFUN_TOOL_EXPORT int writeDebugLog_(Logger *logger, LogLoggerPrintConsole pc, char *file, int line, char *func, char *format, ...);
  41. AFUN_TOOL_EXPORT int writeInfoLog_(Logger *logger, LogLoggerPrintConsole pc, char *file, int line, char *func, char *format, ...);
  42. AFUN_TOOL_EXPORT int writeWarningLog_(Logger *logger, LogLoggerPrintConsole pc, char *file, int line, char *func, char *format, ...);
  43. AFUN_TOOL_EXPORT int writeErrorLog_(Logger *logger, LogLoggerPrintConsole pc, char *file, int line, char *func, char *format, ...);
  44. AFUN_TOOL_EXPORT int writeSendErrorLog_(Logger *logger, LogLoggerPrintConsole pc, char *file, int line, char *func, char *format, ...);
  45. AFUN_TOOL_EXPORT int writeFatalErrorLog_(Logger *logger, LogLoggerPrintConsole pc, char *file, int line, char *func, int exit_code, char *format, ...);
  46. #ifdef __FILENAME__
  47. #define file_line (char *)__FILENAME__ , (int)__LINE__
  48. #else
  49. #define file_line (char *)"xx", (int)__LINE__
  50. #endif
  51. #define writeDebugLog(logger, pc, ...) writeDebugLog_(logger, pc, file_line, (char *)__FUNCTION__, __VA_ARGS__)
  52. #define writeInfoLog(logger, pc, ...) writeInfoLog_(logger, pc, file_line, (char *)__FUNCTION__, __VA_ARGS__)
  53. #define writeWarningLog(logger, pc, ...) writeWarningLog_(logger, pc, file_line, (char *)__FUNCTION__, __VA_ARGS__)
  54. #define writeErrorLog(logger, pc, ...) writeErrorLog_(logger, pc, file_line, (char *)__FUNCTION__, __VA_ARGS__)
  55. #define writeSendErrorLog(logger, pc, ...) writeSendErrorLog_(logger, pc, file_line, (char *)__FUNCTION__, __VA_ARGS__)
  56. #define writeFatalErrorLog(logger, pc, exit_code, ...) writeFatalErrorLog_(logger, pc, file_line, (char *)__FUNCTION__, exit_code, __VA_ARGS__)
  57. #define assertDebugLog(c, logger, pc, ...) ((c) || writeDebugLog(logger, pc, "Assert " #c " error : " __VA_ARGS__))
  58. #define assertInfoLog(c, logger, pc, ...) ((c) || writeInfoLog(logger, pc, "Assert " #c " error : " __VA_ARGS__))
  59. #define assertWarningLog(c, logger, pc, ...) ((c) || writeWarningLog(logger, pc, "Assert " #c " error : " __VA_ARGS__))
  60. #define assertErrorLog(c, logger, pc, ...) ((c) || writeErrorLog(logger, pc, "Assert " #c " error : " __VA_ARGS__))
  61. #endif //AFUN_LOG_H