|
|
#ifndef _WT_TRACE_H_
#define _WT_TRACE_H_
#define TRACEID WTG.g_TraceId
//
// constants and macros used for tracing
//
#define WT_TRACE_ANY ((DWORD)0xFFFF0000 | TRACE_USE_MASK)
#define WT_TRACE_ENTER ((DWORD)0x00010000 | TRACE_USE_MASK)
#define WT_TRACE_LEAVE ((DWORD)0x00020000 | TRACE_USE_MASK)
#define WT_TRACE_TIMER ((DWORD)0x00100000 | TRACE_USE_MASK)
#define WT_TRACE_RECEIVE ((DWORD)0x00200000 | TRACE_USE_MASK)
#define WT_TRACE_CS ((DWORD)0x00400000 | TRACE_USE_MASK)
#define WT_TRACE_EVENT ((DWORD)0x00800000 | TRACE_USE_MASK)
#define WT_TRACE_WT ((DWORD)0x01000000 | TRACE_USE_MASK)
#define WT_TRACE_START ((DWORD)0x02000000 | TRACE_USE_MASK)
#define WT_TRACE_STOP ((DWORD)0x04000000 | TRACE_USE_MASK)
#define WT_TRACE_WAIT_TIMER ((DWORD)0x10000000 | TRACE_USE_MASK)
#define WAIT_DBG 1
#if WAIT_DBG
#define ENTER_CRITICAL_SECTION(pcs, type, proc) \
TRACE2(CS,"----To enter %s in %s", type, proc); \ EnterCriticalSection(pcs); \ TRACE2(CS,"----Entered %s in %s", type, proc) #define LEAVE_CRITICAL_SECTION(pcs, type, proc) \
TRACE2(CS,"----Left %s in %s", type, proc); \ LeaveCriticalSection(pcs)
#define WAIT_FOR_SINGLE_OBJECT( event, time, type, proc) \
TRACE2(EVENT, "++++To wait for singleObj %s in %s", type, proc); \ WaitForSingleObject(event, time); \ TRACE2(EVENT, "++++WaitForSingleObj returned %s in %s", type, proc)
#define SET_EVENT(event, type, proc) \
TRACE2(EVENT, "++++SetEvent %s in %s", type, proc); \ SetEvent(event) #else
#define ENTER_CRITICAL_SECTION(pcs, type, proc) \
EnterCriticalSection(pcs) #define LEAVE_CRITICAL_SECTION(pcs, type, proc) \
LeaveCriticalSection(pcs) #define WAIT_FOR_SINGLE_OBJECT( event, time, type, proc) \
WaitForSingleObject(event, time) #define SET_EVENT(event, type, proc) \
SetEvent(event) #endif
#define TRACESTART() \
TRACEID = TraceRegister("WAIT_THREAD") #define TRACESTOP() \
TraceDeregister(TRACEID) #define ETRACE0(a) \
TracePrintfEx(TRACEID, WT_TRACE_ANY, a) #define TRACE0(l,a) \
TracePrintfEx(TRACEID, WT_TRACE_ ## l, a) #define TRACE1(l,a,b) \
TracePrintfEx(TRACEID, WT_TRACE_ ## l, a, b) #define TRACE2(l,a,b,c) \
TracePrintfEx(TRACEID, WT_TRACE_ ## l, a, b, c) #define TRACE3(l,a,b,c,d) \
TracePrintfEx(TRACEID, WT_TRACE_ ## l, a, b, c, d) #define TRACE4(l,a,b,c,d,e) \
TracePrintfEx(TRACEID, WT_TRACE_ ## l, a, b, c, d, e) #define TRACE5(l,a,b,c,d,e,f) \
TracePrintfEx(TRACEID, WT_TRACE_ ## l, a, b, c, d, e, f)
#define TRACEDUMP(l,a,b,c) \
TraceDumpEx(TRACEID,l,a,b,c,TRUE)
#define DBG2 0
#if DBG
#define TRACE_ENTER(str) \
TracePrintfEx(TRACEID, WT_TRACE_ENTER, str) #define TRACE_LEAVE(str) \
TracePrintfEx(TRACEID, WT_TRACE_LEAVE, str)
#else
#define TRACE_ENTER(str)
#define TRACE_LEAVE(str)
#endif
//
// Event logging macros
//
#define LOGLEVEL WTG.g_LogLevel
#define LOGHANDLE WTG.g_LogHandle
#define LOGERR RouterLogError
#define LOGWARN RouterLogWarning
#define LOGINFO RouterLogInformation
#define LOGWARNDATA RouterLogWarningData
//
// constants used for logging
//
#define WT_LOGGING_NONE 0
#define WT_LOGGING_ERROR 1
#define WT_LOGGING_WARN 2
#define WT_LOGGING_INFO 3
// Error logging
#define LOGERR0(msg,err) \
if (LOGLEVEL >= WT_LOGGING_ERROR) \ LOGERR(LOGHANDLE,WTLOG_ ## msg,0,NULL,(err)) #define LOGERR1(msg,a,err) \
if (LOGLEVEL >= WT_LOGGING_ERROR) \ LOGERR(LOGHANDLE,WTLOG_ ## msg,1,&(a),(err)) #define LOGERR2(msg,a,b,err) \
if (LOGLEVEL >= WT_LOGGING_ERROR) { \ LPSTR _asz[2] = { (a), (b) }; \ LOGERR(LOGHANDLE,WTLOG_ ## msg,2,_asz,(err)); \ } #define LOGERR3(msg,a,b,c,err) \
if (LOGLEVEL >= WT_LOGGING_ERROR) { \ LPSTR _asz[3] = { (a), (b), (c) }; \ LOGERR(LOGHANDLE,WTLOG_ ## msg,3,_asz,(err)); \ } #define LOGERR4(msg,a,b,c,d,err) \
if (LOGLEVEL >= WT_LOGGING_ERROR) { \ LPSTR _asz[4] = { (a), (b), (c), (d) }; \ LOGERR(LOGHANDLE,WTLOG_ ## msg,4,_asz,(err)); \ }
// Warning logging
#define LOGWARN0(msg,err) \
if (LOGLEVEL >= WT_LOGGING_WARN) \ LOGWARN(LOGHANDLE,WTLOG_ ## msg,0,NULL,(err)) #define LOGWARN1(msg,a,err) \
if (LOGLEVEL >= WT_LOGGING_WARN) \ LOGWARN(LOGHANDLE,WTLOG_ ## msg,1,&(a),(err)) #define LOGWARN2(msg,a,b,err) \
if (LOGLEVEL >= WT_LOGGING_WARN) { \ LPSTR _asz[2] = { (a), (b) }; \ LOGWARN(LOGHANDLE,WTLOG_ ## msg,2,_asz,(err)); \ } #define LOGWARN3(msg,a,b,c,err) \
if (LOGLEVEL >= WT_LOGGING_WARN) { \ LPSTR _asz[3] = { (a), (b), (c) }; \ LOGWARN(LOGHANDLE,WTLOG_ ## msg,3,_asz,(err)); \ } #define LOGWARN4(msg,a,b,c,d,err) \
if (LOGLEVEL >= WT_LOGGING_WARN) { \ LPSTR _asz[4] = { (a), (b), (c), (d) }; \ LOGWARN(LOGHANDLE,WTLOG_ ## msg,4,_asz,(err)); \ }
#define LOGWARNDATA2(msg,a,b,dw,buf) \
if (LOGLEVEL >= WT_LOGGING_WARN) { \ LPSTR _asz[2] = { (a), (b) }; \ LOGWARNDATA(LOGHANDLE,WTLOG_ ## msg,2,_asz,(dw),(buf)); \ }
// Information logging
#define LOGINFO0(msg,err) \
if (LOGLEVEL >= WT_LOGGING_INFO) \ LOGINFO(LOGHANDLE,WTLOG_ ## msg,0,NULL,(err)) #define LOGINFO1(msg,a,err) \
if (LOGLEVEL >= WT_LOGGING_INFO) \ LOGINFO(LOGHANDLE,WTLOG_ ## msg,1,&(a),(err)) #define LOGINFO2(msg,a,b,err) \
if (LOGLEVEL >= WT_LOGGING_INFO) { \ LPSTR _asz[2] = { (a), (b) }; \ LOGINFO(LOGHANDLE,WTLOG_ ## msg,2,_asz,(err)); \ } #define LOGINFO3(msg,a,b,c,err) \
if (LOGLEVEL >= WT_LOGGING_INFO) { \ LPSTR _asz[3] = { (a), (b), (c) }; \ LOGINFO(LOGHANDLE,WTLOG_ ## msg,3,_asz,(err)); \ } #define LOGINFO4(msg,a,b,c,d,err) \
if (LOGLEVEL >= WT_LOGGING_INFO) { \ LPSTR _asz[4] = { (a), (b), (c), (d) }; \ LOGINFO(LOGHANDLE,WTLOG_ ## msg,4,_asz,(err)); \ }
#endif //_WT_TRACE_H_
|