log.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #ifndef LOG_H
  2. #define LOG_H
  3. #include <stdio.h>
  4. #include <stdarg.h>
  5. #include <stdbool.h>
  6. #include <time.h>
  7. /*
  8. * ABLOG_KEEP_HOURS
  9. * 本程序(DC)运行日志保留时间,缺省120小时(5天)
  10. * ABLOG_STDOUT
  11. * 是否输出到标准输出,0 不输出, 缺省为 1 输出
  12. * ABLOG_FILE
  13. * 本程序(DC)运行日志输出文件
  14. * 如果不指定输出文件,日志信息会输出到标准输出(忽略ABLOG_STDOUT指定)
  15. * 文件名支持时间模式替换,自动修正参数给定的文件名中的替换标记
  16. * 模式中可以替换内容包括:
  17. * [PID] 用当前进程id
  18. * [YYYY] 虚拟当前时间的年
  19. * [yyyy] 系统当前时间的年
  20. * [MM] 虚拟当前时间的月
  21. * [mm] 系统当前时间的月
  22. * [DD] 虚拟当前时间的日
  23. * [dd] 系统当前时间的日
  24. * [HH] 虚拟当前时间的时
  25. * [hh] 系统当前时间的时
  26. * [MI] 虚拟当前时间的分
  27. * [mi] 系统当前时间的分
  28. * ABLOG_CLASS
  29. * 本程序(DC)运行日志输出内容,由下列标识文字用逗号分隔组合而成,如"Error,Metrics"
  30. * All 缺省,全部信息
  31. * Error 程序运行错误信息
  32. * Metrics 程序运行过程重要提示信息
  33. * State 程序运行状态提示信息
  34. * Detail 程序运行详细信息
  35. * Flow 程序运行流程
  36. * Flow_Public 公共的程序运行流程
  37. * Flow_Private 私有的程序运行流程
  38. * Flow_Restricted 受限的程序运行流程
  39. * Flow_Minor 次要的程序运行流程
  40. *
  41. */
  42. #define LOG_VERSION "0.1.0"
  43. typedef struct {
  44. va_list ap;
  45. const char *fmt;
  46. const char *file;
  47. struct tm *time;
  48. void *udata;
  49. int line;
  50. int level;
  51. } log_Event;
  52. typedef void (*log_LogFn)(log_Event *ev);
  53. typedef void (*log_LockFn)(bool lock, void *udata);
  54. enum { LOG_TRACE, LOG_DEBUG, LOG_INFO, LOG_WARN, LOG_ERROR, LOG_FATAL };
  55. #define log_trace(...) log_log(LOG_TRACE, __FILE__, __LINE__, __VA_ARGS__)
  56. #define log_debug(...) log_log(LOG_DEBUG, __FILE__, __LINE__, __VA_ARGS__)
  57. #define log_info(...) log_log(LOG_INFO, __FILE__, __LINE__, __VA_ARGS__)
  58. #define log_warn(...) log_log(LOG_WARN, __FILE__, __LINE__, __VA_ARGS__)
  59. #define log_error(...) log_log(LOG_ERROR, __FILE__, __LINE__, __VA_ARGS__)
  60. #define log_fatal(...) log_log(LOG_FATAL, __FILE__, __LINE__, __VA_ARGS__)
  61. const char* log_level_string(int level);
  62. void log_set_lock(log_LockFn fn, void *udata);
  63. void log_set_level(int level);
  64. void log_set_quiet(bool enable);
  65. int log_add_callback(log_LogFn fn, void *udata, int level);
  66. int log_add_fp(FILE *fp, int level);
  67. void log_log(int level, const char *file, int line, const char *fmt, ...);
  68. #endif