CkLog.h 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. // CkLog.h: interface for the CkLog class.
  2. #ifndef CKLOG_H
  3. #define CKLOG_H
  4. #define CMBLOG4 //是否使用招行日志库开关
  5. #define CKLOG //是否使用公司日志库开关
  6. #include <stdio.h>
  7. #include <fstream>
  8. #include <string>
  9. #include <iostream>
  10. #include <sys/types.h>
  11. #include <sys/stat.h>
  12. #include <unistd.h>
  13. //#include <thread>
  14. #include <stdarg.h>
  15. #include <ctime>
  16. #include <time.h>
  17. #include <sys/time.h>
  18. #include <pthread.h>
  19. #include <sys/prctl.h>
  20. #include <sys/syscall.h>
  21. #include "wintypes.h"
  22. #if defined(CMBLOG4)
  23. #include "log4vendor.h"
  24. #endif
  25. #if defined(CKLOG)
  26. #include "CommDef.h"
  27. #include "TraceManager.h"
  28. #endif
  29. using namespace std;
  30. #ifdef __cplusplus
  31. extern "C" {
  32. #endif
  33. /* 字节对齐设置为1 */
  34. //#pragma pack(push,1)
  35. #define TRACE_LEN (MAXWORD / 2)
  36. #ifndef __linux__
  37. #include "windows.h"
  38. #define GetProcessId() GetCurrentProcessId()
  39. #define GetThreadId() GetCurrentThreadId()
  40. #else
  41. #define set_thread_name(name) prctl(PR_SET_NAME, (char*)name) //名字的长度最大为15字节,且应该以'\0'结尾 prctl(PR_SET_NAME, (char*)arg);
  42. #define get_thread_name(name) prctl(PR_GET_NAME, (unsigned long)name) //prctl(PR_GET_NAME, (unsigned long)name);
  43. #define GetProcessId() getpid() //或者使用 PID= syscall(__NR_getpid)
  44. #define GetThreadId() syscall(__NR_gettid) //或者使用 TID= syscall(SYS_gettid)
  45. #endif
  46. //获取完整路径中的文件名称
  47. char* GetFileName(char* pstrFullPath);
  48. void* GetPtr(void* pVoid=nullptr); //获取指针
  49. class CkLog_FuncTracer
  50. {
  51. public:
  52. static bool m_bCkLogExtendInf;
  53. CkLog_FuncTracer(const char* pszFunc, const char* pszFile, int nLine, void* pfRet, int iSize);
  54. ~CkLog_FuncTracer();
  55. private:
  56. const char* m_pszFunc;
  57. const char* m_pszFile;
  58. int m_nLine;
  59. short* m_psfRet; //INT16
  60. int* m_pifRet; //INT32
  61. long* m_plfRet; //INT64
  62. };
  63. //declare
  64. #if defined(CMBLOG4)
  65. #define CMBLOG4_DECLARE()
  66. #else
  67. #define CMBLOG4_DECLARE()
  68. #endif
  69. #if defined(CKLOG)
  70. #define CKLOG_DECLARE() \
  71. CTraceManager *pLOG;
  72. #else
  73. #define CKLOG_DECLARE()
  74. #endif
  75. //initialize
  76. #if defined(CMBLOG4)
  77. #define CMBLOG4_INIT(modName, logPath, fileName) \
  78. do { \
  79. std::string err_msg=""; \
  80. cmb::log4vendor::instance(); \
  81. cmb::log_init_config config_mod; \
  82. config_mod.dev_name = modName; \
  83. config_mod.log_type = CMB_LOG_TYPE_FILE; \
  84. config_mod.log_dir = logPath; \
  85. cmb::log4vendor::init(config_mod, err_msg); \
  86. } while (0);
  87. #else
  88. #define CMBLOG4_INIT(modName, logPath, fileName)
  89. #endif
  90. #if defined(CMBLOG4)
  91. #define CMBLOG4_INIT_P(modName, logPath, fileName) \
  92. do { \
  93. char err_msg[VENDOR_BUFF_SIZE] = { '\0' }; \
  94. cmb::log4vendor::instance(); \
  95. cmb::log_init_config_c config_mod; \
  96. strcpy(config_mod.dev_name, modName); \
  97. config_mod.log_type = CMB_LOG_TYPE_FILE; \
  98. strcpy(config_mod.log_dir, logPath); \
  99. cmb::log4vendor::initp(&config_mod, err_msg); \
  100. } while (0);
  101. #else
  102. #define CMBLOG4_INIT_P(modName, logPath, fileName)
  103. #endif
  104. #if defined(CKLOG)
  105. #define CKLOG_INIT(modName, logPath, fileName) \
  106. pLOG = new CTraceManager(); \
  107. pLOG->Register(fileName);
  108. #else
  109. #define CKLOG_INIT(modName, logPath, fileName)
  110. #endif
  111. //EXTERN
  112. #if defined(CKLOG)
  113. #define CKLOG_EXTERN() \
  114. extern CTraceManager *pLOG;
  115. #else
  116. #define CKLOG_EXTERN()
  117. #endif
  118. //记录进出函数 FUNCTION //LOG4VTM_FUNCTION();
  119. #if defined(CMBLOG4)
  120. #define CMBLOG4_FUNCTION_INT32(RetVar) \
  121. cmb::log4vendor_tracer _FunctionLoggerCMB(__FUNCTION__, cmb::log4vendor_tracer::_get_file_name(__FILE__), __LINE__, (int*)GetPtr(RetVar));
  122. #else
  123. #define CMBLOG4_FUNCTION_INT32(RetVar)
  124. #endif
  125. #if defined(CMBLOG4)
  126. #define CMBLOG4_FUNCTION_INT64(RetVar) \
  127. cmb::log4vendor_tracer _FunctionLoggerCMB(__FUNCTION__, cmb::log4vendor_tracer::_get_file_name(__FILE__), __LINE__, (long*)GetPtr(RetVar));
  128. #else
  129. #define CMBLOG4_FUNCTION_INT64(RetVar)
  130. #endif
  131. #if defined(CKLOG)
  132. #define CKLOG_FUNCTION() \
  133. CkLog_FuncTracer _FunctionLoggerCK(__FUNCTION__, GetFileName(__FILE__), __LINE__, nullptr, 0);
  134. #else
  135. #define CKLOG_FUNCTION()
  136. #endif
  137. #if defined(CKLOG)
  138. #define CKLOG_FUNCTION_INT(RetVar) \
  139. CkLog_FuncTracer _FunctionLoggerCK(__FUNCTION__, GetFileName(__FILE__), __LINE__, GetPtr(&RetVar), sizeof(RetVar));
  140. #else
  141. #define CKLOG_FUNCTION_INT(RetVar)
  142. #endif
  143. #if defined(CMBLOG4)
  144. #define LOG_CMBLOG4(logLevel, ...) \
  145. do { \
  146. int iCkLog_BufLen = snprintf(NULL, 0, ## __VA_ARGS__); \
  147. char CkLog_Buf[256 + iCkLog_BufLen + 1]; \
  148. memset(CkLog_Buf, 0x00, sizeof(CkLog_Buf)); \
  149. int iCkLog_HeadLen = 0; \
  150. if(CkLog_FuncTracer::m_bCkLogExtendInf) \
  151. iCkLog_HeadLen = snprintf(CkLog_Buf, sizeof(CkLog_Buf), " Pid[%d],Tid[%d],{%s}[%d]<%s>: ", GetProcessId(), GetThreadId(), GetFileName(__FILE__), __LINE__, __FUNCTION__); \
  152. snprintf(CkLog_Buf + iCkLog_HeadLen, iCkLog_BufLen+1, ## __VA_ARGS__); \
  153. LOG4VTM(logLevel, CkLog_Buf); \
  154. } while (0);
  155. #else
  156. #define LOG_CMBLOG4(logLevel, ...)
  157. #endif
  158. //bool TraceInFormat( int nType, int nLevel, char* lpszTraceData, ... );
  159. #if defined(CKLOG)
  160. #define LOG_CKLOG(logLevel, ...) \
  161. do { \
  162. int iCkLog_BufLen = snprintf(NULL, 0, ## __VA_ARGS__); \
  163. char CkLog_Buf[256 + iCkLog_BufLen + 1]; \
  164. memset(CkLog_Buf, 0x00, sizeof(CkLog_Buf)); \
  165. int iCkLog_HeadLen = 0; \
  166. if(CkLog_FuncTracer::m_bCkLogExtendInf) \
  167. iCkLog_HeadLen = snprintf(CkLog_Buf, sizeof(CkLog_Buf), " Pid[%d],Tid[%d],{%s}[%d]<%s>: ", GetProcessId(), GetThreadId(), GetFileName(__FILE__), __LINE__, __FUNCTION__); \
  168. snprintf(CkLog_Buf + iCkLog_HeadLen, iCkLog_BufLen+1, ## __VA_ARGS__); \
  169. pLOG->TraceInFormat(TRM_INT, logLevel, "%s", CkLog_Buf); \
  170. } while (0);
  171. #else
  172. #define LOG_CKLOG(logLevel, ...)
  173. #endif
  174. //bool TraceInBuffer( int nType, int nLevel, unsigned char* lpbyTraceData, unsigned int uDataLen, char* lpszMsg = NULL,
  175. //unsigned int* lpuMaskOffsetArray = NULL, unsigned int* lpuMaskLenArray = NULL, unsigned int uMaskCnt = 0 );
  176. #if defined(CKLOG)
  177. #define LOGX_CKLOG(logLevel, pData, Len, ...) \
  178. do { \
  179. int iCkLog_BufLen = snprintf(NULL, 0, ## __VA_ARGS__); \
  180. char CkLog_Buf[256 + iCkLog_BufLen + 1]; \
  181. memset(CkLog_Buf, 0x00, sizeof(CkLog_Buf)); \
  182. int iCkLog_HeadLen = 0; \
  183. if(CkLog_FuncTracer::m_bCkLogExtendInf) \
  184. iCkLog_HeadLen = snprintf(CkLog_Buf, sizeof(CkLog_Buf), " Pid[%d],Tid[%d],{%s}[%d]<%s>: ", GetProcessId(), GetThreadId(), GetFileName(__FILE__), __LINE__, __FUNCTION__); \
  185. snprintf(CkLog_Buf + iCkLog_HeadLen, iCkLog_BufLen+1, ## __VA_ARGS__); \
  186. pLOG->TraceInBuffer(TRM_INT, logLevel, (unsigned char*)pData, (unsigned int)Len, CkLog_Buf); \
  187. } while (0);
  188. #else
  189. #define LOGX_CKLOG(logLevel, pData, Len, ...)
  190. #endif
  191. /*
  192. #define CMB_LOG_TRACE 1
  193. #define CMB_LOG_DEBUG 2
  194. #define CMB_LOG_INFO 3
  195. #define CMB_LOG_WARN 4
  196. #define CMB_LOG_ERROR 5
  197. #define CMB_LOG_FATAL 6
  198. */
  199. /*
  200. #define TRM_LV_COMMN (0x0001)
  201. #define TRM_LV_WARNG (0x0002)
  202. #define TRM_LV_ERROR (0x0004)
  203. #define TRM_LV_DEBUG (0x0008)
  204. */
  205. /*记录日志入口函数 Start*/
  206. //declare
  207. #define LOG_DECLARE() \
  208. CMBLOG4_DECLARE() \
  209. CKLOG_DECLARE()
  210. //initialize
  211. #define LOG_INIT(modName, logPath, fileName) \
  212. CMBLOG4_INIT(modName, logPath, fileName) \
  213. CKLOG_INIT(modName, logPath, fileName)
  214. #define LOG_INIT_P(modName, logPath, fileName) \
  215. CMBLOG4_INIT_P(modName, logPath, fileName) \
  216. CKLOG_INIT(modName, logPath, fileName)
  217. #define LOG_EXTERN() \
  218. CKLOG_EXTERN()
  219. //记录进出函数信息
  220. #define LOG_FUNCTION() \
  221. LOG4VTM_FUNCTION(); \
  222. CKLOG_FUNCTION()
  223. //记录进出函数信息 带short返回值
  224. #define LOG_FUNCTION_INT16(RetVar) \
  225. CKLOG_FUNCTION_INT(RetVar)
  226. //记录进出函数信息 带int返回值
  227. #define LOG_FUNCTION_INT32(RetVar) \
  228. CMBLOG4_FUNCTION_INT32(&RetVar) \
  229. CKLOG_FUNCTION_INT(RetVar)
  230. //记录进出函数信息 带long返回值
  231. #define LOG_FUNCTION_INT64(RetVar) \
  232. CMBLOG4_FUNCTION_INT64(&RetVar) \
  233. CKLOG_FUNCTION_INT(RetVar)
  234. #define LogE(...) \
  235. do { \
  236. LOG_CMBLOG4(ERROR, ## __VA_ARGS__); \
  237. LOG_CKLOG(TRM_LV_ERROR, ## __VA_ARGS__); \
  238. } while (0);
  239. #define LogW(...) \
  240. do { \
  241. LOG_CMBLOG4(WARN, ## __VA_ARGS__); \
  242. LOG_CKLOG(TRM_LV_WARNG, ## __VA_ARGS__); \
  243. } while (0);
  244. #define LogM(...) \
  245. do { \
  246. LOG_CMBLOG4(INFO, ## __VA_ARGS__); \
  247. LOG_CKLOG(TRM_LV_COMMN, ## __VA_ARGS__); \
  248. } while (0);
  249. #define LogD(...) \
  250. do { \
  251. LOG_CMBLOG4(DEBUG, ## __VA_ARGS__); \
  252. LOG_CKLOG(TRM_LV_DEBUG, ## __VA_ARGS__); \
  253. } while (0);
  254. /*
  255. #define TRM_LV_COMMN (0x0001)
  256. #define TRM_LV_WARNG (0x0002)
  257. #define TRM_LV_ERROR (0x0004)
  258. #define TRM_LV_DEBUG (0x0008)
  259. */
  260. //记录内存数据 HEX 表示
  261. #define LogXE(pData, Len, ...) \
  262. do { \
  263. LOGX_CKLOG(TRM_LV_ERROR, pData, Len, ## __VA_ARGS__); \
  264. } while (0);
  265. #define LogXW(pData, Len, ...) \
  266. do { \
  267. LOGX_CKLOG(TRM_LV_WARNG, pData, Len, ## __VA_ARGS__); \
  268. } while (0);
  269. #define LogXM(pData, Len, ...) \
  270. do { \
  271. LOGX_CKLOG(TRM_LV_COMMN, pData, Len, ## __VA_ARGS__); \
  272. } while (0);
  273. #define LogXD(pData, Len, ...) \
  274. do { \
  275. LOGX_CKLOG(TRM_LV_DEBUG, pData, Len, ## __VA_ARGS__); \
  276. } while (0);
  277. /*记录日志入口函数 End*/
  278. /* 恢复字节对齐方式 */
  279. //#pragma pack(pop)
  280. #ifdef __cplusplus
  281. } /*extern "C"*/
  282. #endif
  283. #endif