Logger.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. #pragma once
  2. // 下列 ifdef 块是创建使从 DLL 导出更简单的
  3. // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 LOGGER_EXPORTS
  4. // 符号编译的。在使用此 DLL 的
  5. // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
  6. // LOGGER_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
  7. // 符号视为是被导出的。
  8. //typedef enum _Log_Level {
  9. // LOG_LEVEL_INIT,
  10. // LOG_LEVEL_TRACE,
  11. // LOG_LEVEL_DEBUG,
  12. // LOG_LEVEL_INFO,
  13. // LOG_LEVEL_WARNING,
  14. // LOG_LEVEL_ERROR,
  15. // LOG_LEVEL_FATAL,
  16. // LOG_LEVEL_MAX
  17. //}LOG_LEVEL;
  18. class Logger_Pattern {
  19. public:
  20. Logger_Pattern(void);
  21. virtual ~Logger_Pattern(void);
  22. bool SetLevel(LONG Level);
  23. LOG_LEVEL m_Level;//log level,def:WARNING
  24. size_t MaxFileSize;//log file size limit.def:10M
  25. size_t MaxBackupCount;//log file count limit.def:
  26. size_t MaxTimePeriod;//by day
  27. //debug info
  28. bool PrintFileName;
  29. bool PrintFunctionName;
  30. bool PrintLine;
  31. //date
  32. bool PrintDate;
  33. //time
  34. //bool PrintTime;
  35. //Proc
  36. bool PrintProcId;
  37. //Thread
  38. bool PrintThreadId;
  39. //cachable
  40. bool Cachable;
  41. //the whole pattern like below line
  42. /*
  43. //full log line
  44. [ date ] [ time ] [LEVEL] [ PID ][ TID ] [ FileName Line Func ]
  45. [2016:11:07] [14:03:35:0231] [DEBUG] [PID:0023][TID:00137] [FileName (Line) (Function)] : context...........
  46. //minimum log line
  47. [14:03:35:0231] : context......
  48. */
  49. };
  50. class Logger
  51. {
  52. DWORD m_FileId;
  53. /*file name using NAME_YYYYMMDDHHMMSS.LOG*/
  54. string *m_pFullLogFileName;
  55. string *m_pErrFullLogFileName;
  56. Logger_Pattern *m_pPattern;
  57. public:
  58. Logger(Logger &obj);
  59. Logger(void);
  60. virtual ~Logger(void);
  61. Logger& operator = (const Logger &tValue);
  62. void SetLogPattern(Logger_Pattern& Pattern);
  63. void GetLogPattern(Logger_Pattern& Pattern);
  64. void SetLogFilepath(const char *pPath);
  65. bool ChangeLoggerFileTitle(Logger* p, const char *pTitle);
  66. bool IsLogFilePathExist();
  67. const char* GetErrLogFilePath();
  68. DWORD GetLogFileId();
  69. int GetLogLevel();
  70. public:
  71. static Logger* CreateLogger();
  72. static void ReleseLogger(Logger* pLogger);
  73. static Logger* GetGlobalLogger();
  74. static Logger* m_pLogger;
  75. };
  76. #define PRINTA_LOG(log,Level,format,...) \
  77. {\
  78. if (log)\
  79. {\
  80. int level = log->GetLogLevel(); \
  81. if (level <= Level)\
  82. {\
  83. __DebugPrintA(log, LOG_LEVEL_INFO, __FILE__, __LINE__, __FUNCTION__, format, __VA_ARGS__); \
  84. }\
  85. }\
  86. }
  87. //#define PRINTA_TRACE(log,format,...) __DebugPrintA(log,LOG_LEVEL_TRACE,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  88. //#define PRINTA_DEBUG(log,format,...) __DebugPrintA(log,LOG_LEVEL_DEBUG,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  89. //#define PRINTA_INFO(log,format,...) __DebugPrintA(log,LOG_LEVEL_INFO,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  90. //#define PRINTA_WARN(log,format,...) __DebugPrintA(log,LOG_LEVEL_WARNING,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  91. //#define PRINTA_ERROR(log,format,...) __DebugPrintA(log,LOG_LEVEL_ERROR,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  92. //#define PRINTA_FATAL(log,format,...) __DebugPrintA(log,LOG_LEVEL_FATAL,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  93. #define GPRINTA_TRACE(format,...) __G_DebugPrintA(LOG_LEVEL_TRACE,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  94. #define GPRINTA_DEBUG(format,...) __G_DebugPrintA(LOG_LEVEL_DEBUG,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  95. #define GPRINTA_INFO(format,...) __G_DebugPrintA(LOG_LEVEL_INFO,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  96. #define GPRINTA_WARN(format,...) __G_DebugPrintA(LOG_LEVEL_WARNING,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  97. #define GPRINTA_ERROR(format,...) __G_DebugPrintA(LOG_LEVEL_ERROR,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  98. #define GPRINTA_FATAL(format,...) __G_DebugPrintA(LOG_LEVEL_FATAL,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  99. #define TPRINTA_TRACE(format,...) //__T_DebugPrintA(LOG_LEVEL_TRACE,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  100. #define TPRINTA_DEBUG(format,...) //__T_DebugPrintA(LOG_LEVEL_DEBUG,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  101. #define TPRINTA_INFO(format,...) //__T_DebugPrintA(LOG_LEVEL_INFO,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  102. #define TPRINTA_WARN(format,...) //__T_DebugPrintA(LOG_LEVEL_WARNING,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  103. #define TPRINTA_ERROR(format,...) //__T_DebugPrintA(LOG_LEVEL_ERROR,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  104. #define TPRINTA_FATAL(format,...) //__T_DebugPrintA(LOG_LEVEL_FATAL,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  105. #define RES_TPRINTA_TRACE(Res,format,...) __Res_T_DebugPrintA(Res,LOG_LEVEL_TRACE,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  106. #define RES_TPRINTA_DEBUG(Res,format,...) __Res_T_DebugPrintA(Res,LOG_LEVEL_DEBUG,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  107. #define RES_TPRINTA_INFO(Res,format,...) __Res_T_DebugPrintA(Res,LOG_LEVEL_INFO,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  108. #define RES_TPRINTA_WARN(Res,format,...) __Res_T_DebugPrintA(Res,LOG_LEVEL_WARNING,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  109. #define RES_TPRINTA_ERROR(Res,format,...) __Res_T_DebugPrintA(Res,LOG_LEVEL_ERROR,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  110. #define RES_TPRINTA_FATAL(Res,format,...) __Res_T_DebugPrintA(Res,LOG_LEVEL_FATAL,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  111. #define RES_PRINTA_TRACE(Log,Res,format,...) __Res_DebugPrintA(Log,Res,LOG_LEVEL_TRACE,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  112. #define RES_PRINTA_DEBUG(Log,Res,format,...) __Res_DebugPrintA(Log,Res,LOG_LEVEL_DEBUG,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  113. #define RES_PRINTA_INFO(Log,Res,format,...) __Res_DebugPrintA(Log,Res,LOG_LEVEL_INFO,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  114. #define RES_PRINTA_WARN(Log,Res,format,...) __Res_DebugPrintA(Log,Res,LOG_LEVEL_WARNING,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  115. #define RES_PRINTA_ERROR(Log,Res,format,...) __Res_DebugPrintA(Log,Res,LOG_LEVEL_ERROR,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)
  116. #define RES_PRINTA_FATAL(Log,Res,format,...) __Res_DebugPrintA(Log,Res,LOG_LEVEL_FATAL,__FILE__,__LINE__,__FUNCTION__,format,__VA_ARGS__)