AMPS:Trace模块源码解读 (八)
e->unTraceMode = r_unTraceMode;
poAMPSTrace->nTraceID = 1;
memcpy(poAMPSTrace->pchTraceFilePath, r_pchFilePath, strlen(r_pchFilePath));
if((AMPS_TRACE_MODE_FILE == poAMPSTrace->unTraceMode) || (AMPS_TRACE_MODE_BOTH == poAMPSTrace->unTraceMode))
{
printf("Opening File from Init \n");
if(AMPS_SUCCESS != Trace_OpenFileForTracing(poAMPSTrace, poAMPSTrace->pchTraceFilePath))
{
printf("Trace_Init: SAPI_FileOpen failed\n");
AMPS_InternalFree(poAMPSTrace);
return AMPS_ERROR_FAILURE;
}
}
/*将初始化好的跟踪信息赋值给全局跟踪句柄保存*/
g_poAMPSTrace = poAMPSTrace;
printf("Trace_Init : Leaving.\n");
return AMPS_SUCCESS;
}
/*****************************************************************
函数名称: Trace_Cleanup
功能描述: 注销跟踪模块,由AMPS核心模块注销函数Core_Cleanup调用
入参::
void* r_pvAMPSContext AMPS应用上下文数据结构
出参:
--
返回值:
void
*****************************************************************/
void Trace_Cleanup(void* r_pvAMPSContext)
{
t_AMPSTrace* poAMPSTrace = g_poAMPSTrace;
printf("Trace_Cleanup : Entering.\n");
if(NULL == poAMPSTrace)
{
return;
}
/*跟踪运行模式中设置了文件模式,则先关闭跟踪文件*/
if((AMPS_TRACE_MODE_FILE == poAMPSTrace->unTraceMode) || (AMPS_TRACE_MODE_BOTH == poAMPSTrace->unTraceMode))
{
printf("Trace_Cleanup : call SAPI_FileClose.\n");
SAPI_FileClose(r_pvAMPSContext, &poAMPSTrace->oAMPSFile);
}
/*释放初始化时保存的全局跟踪句柄*/
AMPS_InternalFree(poAMPSTrace);
printf("Trace_Cleanup : Leaving.\n");
}
/*****************************************************************
函数名称: AMPS_Trace
功能描述: 跟踪打点函数,在需要记录信息的地方调用此函数即可,通常此函数
使用下面的简化格式:
#define TRACE( nModuleID, nTraceLevel, pMessage , ... ) \
AMPS_Trace( __LINE__, __FILE__, __FUNCTION__, nModuleID,\
nTraceLevel, pMessage, __VA_ARGS__)
入参::
int r_nLineNumber 当前打点所处文件行
char* r_pchFileName 当前打点所处文件名
const char* r_pchFunctionName 当前打点所处函数名
unsigned int r_unModuleId 打点的模块号
unsigned int r_unTraceLevel 跟踪级别
char* r_puchMessage, ... 跟踪内容
出参:
--
返回值:
void
*****************************************************************/
void AMPS_Trace(int r_nLineNumber, char* r_pchFileName, const char* r_pchFunctionName, unsigned int r_unModuleId, unsigned int r_unTraceLevel, char* r_puchMessage, ...)
{
t_AMPSTrace* poAMPSTrace = g_poAMPSTrace;
t_AMPSParameterList oAMPSParameterList;
unsigned int unModuleId = 0;
unsigned int unTraceLevel = 0;
unsigned int unTraceMode = 0;
if(NULL == poAMPSTrace)
{
return;
}
unModuleId = poAMPSTrace->unModuleId;
unTraceLevel = poAMPSTrace->unTraceLevel;
unTraceMode = poAMPSTrace->unTraceMode;
/*如果打点所填写的模块号与初始化时使用的模块号是否一致,且跟踪级别一致,
刚记录跟踪信息,不则,不记录*/
if((unModuleId & r_unModuleId) && (unTraceLevel & r_unTraceLevel))
{
int nOffset = 0;
/*设置文件路径*/
char* pchFileName = strrchr(r_pchFileName, '\\');
if(NULL == pchFileName)
{
pchFileName = r_pchFileName;
}
else
{
pchFileName += 1;
}
/*根据级别不同,获取不同便移量,用于获得其对应的字符串类型的日志级别*/
whi