自己写的C++ trace日志类

来源:互联网 发布:索尼 游戏机 知乎 编辑:程序博客网 时间:2024/05/17 07:16
interfaceITrace{public:virtualintLog(char *pszfmt, ...)=0;public:boolm_bLogOn;//日志开关};classCTraceCmd:public ITrace//命令行日志{public:virtual intLog(char *pszfmt, ...){if ( m_bLogOn ){char szBuf[1024]={0};va_list args;va_start(args, pszfmt);vsprintf_s(szBuf, sizeof(szBuf),pszfmt, args);va_end(args);printf(szBuf);return TRUE;}else{return FALSE;}}};classCTraceDbg:public ITrace//DEBUG窗口日志{public:virtual intLog(char *pszfmt, ...){if ( m_bLogOn ){char szBuf[1024]={0};va_list args;va_start(args, pszfmt);vsprintf_s(szBuf,sizeof(szBuf), pszfmt, args);va_end(args);OutputDebugStringA(szBuf);return TRUE;}else{return FALSE;}}};classCTraceFile:public ITrace//文件日志{public:virtual intLog(char *pszfmt, ...){if ( m_bLogOn ){int iRet = FALSE;FILE* fp = NULL ;do {fp = fopen("c:\\123.log","a+");if ( fp == NULL ){break; ;}char szBuf[1024]={0};va_list args;va_start(args, pszfmt);vfprintf_s(fp, pszfmt, args);va_end(args);fclose(fp);fp = NULL ;iRet = TRUE ;} while (FALSE);return iRet;}else{return FALSE;}}};classCTraceFactory{public:enumemTraceType{TRACE_CMD,TRACE_DBG,TRACE_FILE};public:static ITrace*GetTrace(emTraceType eType = TRACE_DBG){ITrace* pTrace = NULL ;switch(eType){case TRACE_CMD:pTrace = new CTraceCmd;break;case TRACE_DBG:pTrace = new CTraceDbg;break;case TRACE_FILE:pTrace = new CTraceFile;break;}return pTrace;}};