| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334 |
- // CkLog.h: interface for the CkLog class.
- #ifndef CKLOG_H
- #define CKLOG_H
- #define CMBLOG4 //是否使用招行日志库开关
- #define CKLOG //是否使用公司日志库开关
- #include <stdio.h>
- #include <fstream>
- #include <string>
- #include <iostream>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <unistd.h>
- //#include <thread>
- #include <stdarg.h>
- #include <ctime>
- #include <time.h>
- #include <sys/time.h>
- #include <pthread.h>
- #include <sys/prctl.h>
- #include <sys/syscall.h>
- #include "wintypes.h"
- #if defined(CMBLOG4)
- #include "log4vendor.h"
- #endif
- #if defined(CKLOG)
- #include "CommDef.h"
- #include "TraceManager.h"
- #endif
- using namespace std;
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* 字节对齐设置为1 */
- //#pragma pack(push,1)
- #define TRACE_LEN (MAXWORD / 2)
- #ifndef __linux__
- #include "windows.h"
- #define GetProcessId() GetCurrentProcessId()
- #define GetThreadId() GetCurrentThreadId()
- #else
- #define set_thread_name(name) prctl(PR_SET_NAME, (char*)name) //名字的长度最大为15字节,且应该以'\0'结尾 prctl(PR_SET_NAME, (char*)arg);
- #define get_thread_name(name) prctl(PR_GET_NAME, (unsigned long)name) //prctl(PR_GET_NAME, (unsigned long)name);
- #define GetProcessId() getpid() //或者使用 PID= syscall(__NR_getpid)
- #define GetThreadId() syscall(__NR_gettid) //或者使用 TID= syscall(SYS_gettid)
- #endif
- //获取完整路径中的文件名称
- char* GetFileName(char* pstrFullPath);
- void* GetPtr(void* pVoid=nullptr); //获取指针
- class CkLog_FuncTracer
- {
- public:
- static bool m_bCkLogExtendInf;
- CkLog_FuncTracer(const char* pszFunc, const char* pszFile, int nLine, void* pfRet, int iSize);
- ~CkLog_FuncTracer();
- private:
- const char* m_pszFunc;
- const char* m_pszFile;
- int m_nLine;
- short* m_psfRet; //INT16
- int* m_pifRet; //INT32
- long* m_plfRet; //INT64
- };
- //declare
- #if defined(CMBLOG4)
- #define CMBLOG4_DECLARE()
- #else
- #define CMBLOG4_DECLARE()
- #endif
- #if defined(CKLOG)
- #define CKLOG_DECLARE() \
- CTraceManager *pLOG;
- #else
- #define CKLOG_DECLARE()
- #endif
- //initialize
- #if defined(CMBLOG4)
- #define CMBLOG4_INIT(modName, logPath, fileName) \
- do { \
- std::string err_msg=""; \
- cmb::log4vendor::instance(); \
- cmb::log_init_config config_mod; \
- config_mod.dev_name = modName; \
- config_mod.log_type = CMB_LOG_TYPE_FILE; \
- config_mod.log_dir = logPath; \
- cmb::log4vendor::init(config_mod, err_msg); \
- } while (0);
- #else
- #define CMBLOG4_INIT(modName, logPath, fileName)
- #endif
- #if defined(CMBLOG4)
- #define CMBLOG4_INIT_P(modName, logPath, fileName) \
- do { \
- char err_msg[VENDOR_BUFF_SIZE] = { '\0' }; \
- cmb::log4vendor::instance(); \
- cmb::log_init_config_c config_mod; \
- strcpy(config_mod.dev_name, modName); \
- config_mod.log_type = CMB_LOG_TYPE_FILE; \
- strcpy(config_mod.log_dir, logPath); \
- cmb::log4vendor::initp(&config_mod, err_msg); \
- } while (0);
- #else
- #define CMBLOG4_INIT_P(modName, logPath, fileName)
- #endif
- #if defined(CKLOG)
- #define CKLOG_INIT(modName, logPath, fileName) \
- pLOG = new CTraceManager(); \
- pLOG->Register(fileName);
- #else
- #define CKLOG_INIT(modName, logPath, fileName)
- #endif
- //EXTERN
- #if defined(CKLOG)
- #define CKLOG_EXTERN() \
- extern CTraceManager *pLOG;
- #else
- #define CKLOG_EXTERN()
- #endif
- //记录进出函数 FUNCTION //LOG4VTM_FUNCTION();
- #if defined(CMBLOG4)
- #define CMBLOG4_FUNCTION_INT32(RetVar) \
- cmb::log4vendor_tracer _FunctionLoggerCMB(__FUNCTION__, cmb::log4vendor_tracer::_get_file_name(__FILE__), __LINE__, (int*)GetPtr(RetVar));
- #else
- #define CMBLOG4_FUNCTION_INT32(RetVar)
- #endif
- #if defined(CMBLOG4)
- #define CMBLOG4_FUNCTION_INT64(RetVar) \
- cmb::log4vendor_tracer _FunctionLoggerCMB(__FUNCTION__, cmb::log4vendor_tracer::_get_file_name(__FILE__), __LINE__, (long*)GetPtr(RetVar));
- #else
- #define CMBLOG4_FUNCTION_INT64(RetVar)
- #endif
- #if defined(CKLOG)
- #define CKLOG_FUNCTION() \
- CkLog_FuncTracer _FunctionLoggerCK(__FUNCTION__, GetFileName(__FILE__), __LINE__, nullptr, 0);
- #else
- #define CKLOG_FUNCTION()
- #endif
- #if defined(CKLOG)
- #define CKLOG_FUNCTION_INT(RetVar) \
- CkLog_FuncTracer _FunctionLoggerCK(__FUNCTION__, GetFileName(__FILE__), __LINE__, GetPtr(&RetVar), sizeof(RetVar));
- #else
- #define CKLOG_FUNCTION_INT(RetVar)
- #endif
- #if defined(CMBLOG4)
- #define LOG_CMBLOG4(logLevel, ...) \
- do { \
- int iCkLog_BufLen = snprintf(NULL, 0, ## __VA_ARGS__); \
- char CkLog_Buf[256 + iCkLog_BufLen + 1]; \
- memset(CkLog_Buf, 0x00, sizeof(CkLog_Buf)); \
- int iCkLog_HeadLen = 0; \
- if(CkLog_FuncTracer::m_bCkLogExtendInf) \
- iCkLog_HeadLen = snprintf(CkLog_Buf, sizeof(CkLog_Buf), " Pid[%d],Tid[%d],{%s}[%d]<%s>: ", GetProcessId(), GetThreadId(), GetFileName(__FILE__), __LINE__, __FUNCTION__); \
- snprintf(CkLog_Buf + iCkLog_HeadLen, iCkLog_BufLen+1, ## __VA_ARGS__); \
- LOG4VTM(logLevel, CkLog_Buf); \
- } while (0);
- #else
- #define LOG_CMBLOG4(logLevel, ...)
- #endif
- //bool TraceInFormat( int nType, int nLevel, char* lpszTraceData, ... );
- #if defined(CKLOG)
- #define LOG_CKLOG(logLevel, ...) \
- do { \
- int iCkLog_BufLen = snprintf(NULL, 0, ## __VA_ARGS__); \
- char CkLog_Buf[256 + iCkLog_BufLen + 1]; \
- memset(CkLog_Buf, 0x00, sizeof(CkLog_Buf)); \
- int iCkLog_HeadLen = 0; \
- if(CkLog_FuncTracer::m_bCkLogExtendInf) \
- iCkLog_HeadLen = snprintf(CkLog_Buf, sizeof(CkLog_Buf), " Pid[%d],Tid[%d],{%s}[%d]<%s>: ", GetProcessId(), GetThreadId(), GetFileName(__FILE__), __LINE__, __FUNCTION__); \
- snprintf(CkLog_Buf + iCkLog_HeadLen, iCkLog_BufLen+1, ## __VA_ARGS__); \
- pLOG->TraceInFormat(TRM_INT, logLevel, "%s", CkLog_Buf); \
- } while (0);
- #else
- #define LOG_CKLOG(logLevel, ...)
- #endif
- //bool TraceInBuffer( int nType, int nLevel, unsigned char* lpbyTraceData, unsigned int uDataLen, char* lpszMsg = NULL,
- //unsigned int* lpuMaskOffsetArray = NULL, unsigned int* lpuMaskLenArray = NULL, unsigned int uMaskCnt = 0 );
- #if defined(CKLOG)
- #define LOGX_CKLOG(logLevel, pData, Len, ...) \
- do { \
- int iCkLog_BufLen = snprintf(NULL, 0, ## __VA_ARGS__); \
- char CkLog_Buf[256 + iCkLog_BufLen + 1]; \
- memset(CkLog_Buf, 0x00, sizeof(CkLog_Buf)); \
- int iCkLog_HeadLen = 0; \
- if(CkLog_FuncTracer::m_bCkLogExtendInf) \
- iCkLog_HeadLen = snprintf(CkLog_Buf, sizeof(CkLog_Buf), " Pid[%d],Tid[%d],{%s}[%d]<%s>: ", GetProcessId(), GetThreadId(), GetFileName(__FILE__), __LINE__, __FUNCTION__); \
- snprintf(CkLog_Buf + iCkLog_HeadLen, iCkLog_BufLen+1, ## __VA_ARGS__); \
- pLOG->TraceInBuffer(TRM_INT, logLevel, (unsigned char*)pData, (unsigned int)Len, CkLog_Buf); \
- } while (0);
- #else
- #define LOGX_CKLOG(logLevel, pData, Len, ...)
- #endif
- /*
- #define CMB_LOG_TRACE 1
- #define CMB_LOG_DEBUG 2
- #define CMB_LOG_INFO 3
- #define CMB_LOG_WARN 4
- #define CMB_LOG_ERROR 5
- #define CMB_LOG_FATAL 6
- */
- /*
- #define TRM_LV_COMMN (0x0001)
- #define TRM_LV_WARNG (0x0002)
- #define TRM_LV_ERROR (0x0004)
- #define TRM_LV_DEBUG (0x0008)
- */
- /*记录日志入口函数 Start*/
- //declare
- #define LOG_DECLARE() \
- CMBLOG4_DECLARE() \
- CKLOG_DECLARE()
- //initialize
- #define LOG_INIT(modName, logPath, fileName) \
- CMBLOG4_INIT(modName, logPath, fileName) \
- CKLOG_INIT(modName, logPath, fileName)
- #define LOG_INIT_P(modName, logPath, fileName) \
- CMBLOG4_INIT_P(modName, logPath, fileName) \
- CKLOG_INIT(modName, logPath, fileName)
- #define LOG_EXTERN() \
- CKLOG_EXTERN()
- //记录进出函数信息
- #define LOG_FUNCTION() \
- LOG4VTM_FUNCTION(); \
- CKLOG_FUNCTION()
- //记录进出函数信息 带short返回值
- #define LOG_FUNCTION_INT16(RetVar) \
- CKLOG_FUNCTION_INT(RetVar)
- //记录进出函数信息 带int返回值
- #define LOG_FUNCTION_INT32(RetVar) \
- CMBLOG4_FUNCTION_INT32(&RetVar) \
- CKLOG_FUNCTION_INT(RetVar)
- //记录进出函数信息 带long返回值
- #define LOG_FUNCTION_INT64(RetVar) \
- CMBLOG4_FUNCTION_INT64(&RetVar) \
- CKLOG_FUNCTION_INT(RetVar)
- #define LogE(...) \
- do { \
- LOG_CMBLOG4(ERROR, ## __VA_ARGS__); \
- LOG_CKLOG(TRM_LV_ERROR, ## __VA_ARGS__); \
- } while (0);
- #define LogW(...) \
- do { \
- LOG_CMBLOG4(WARN, ## __VA_ARGS__); \
- LOG_CKLOG(TRM_LV_WARNG, ## __VA_ARGS__); \
- } while (0);
- #define LogM(...) \
- do { \
- LOG_CMBLOG4(INFO, ## __VA_ARGS__); \
- LOG_CKLOG(TRM_LV_COMMN, ## __VA_ARGS__); \
- } while (0);
- #define LogD(...) \
- do { \
- LOG_CMBLOG4(DEBUG, ## __VA_ARGS__); \
- LOG_CKLOG(TRM_LV_DEBUG, ## __VA_ARGS__); \
- } while (0);
- /*
- #define TRM_LV_COMMN (0x0001)
- #define TRM_LV_WARNG (0x0002)
- #define TRM_LV_ERROR (0x0004)
- #define TRM_LV_DEBUG (0x0008)
- */
- //记录内存数据 HEX 表示
- #define LogXE(pData, Len, ...) \
- do { \
- LOGX_CKLOG(TRM_LV_ERROR, pData, Len, ## __VA_ARGS__); \
- } while (0);
- #define LogXW(pData, Len, ...) \
- do { \
- LOGX_CKLOG(TRM_LV_WARNG, pData, Len, ## __VA_ARGS__); \
- } while (0);
- #define LogXM(pData, Len, ...) \
- do { \
- LOGX_CKLOG(TRM_LV_COMMN, pData, Len, ## __VA_ARGS__); \
- } while (0);
- #define LogXD(pData, Len, ...) \
- do { \
- LOGX_CKLOG(TRM_LV_DEBUG, pData, Len, ## __VA_ARGS__); \
- } while (0);
- /*记录日志入口函数 End*/
- /* 恢复字节对齐方式 */
- //#pragma pack(pop)
- #ifdef __cplusplus
- } /*extern "C"*/
- #endif
- #endif
|