2014年3月26日14:07:29
TCHAR型版本的写日志函数
1、使用VS2008创建一个对话框MFC项目。
2、代码:
bool _tGetLocalTimeStr(TCHAR * str,tm * pNowTm)
{
_stprintf(str,_T("%4d-%02d-%02d %02d:%02d:%02d"),pNowTm->tm_year+1900,
pNowTm->tm_mon+1,pNowTm->tm_mday,pNowTm->tm_hour,pNowTm->tm_min,pNowTm->tm_sec);
return true;
}
bool _tGetLogLevelStr(TCHAR * tstrLogLevel,int nLogLevel)
{
switch(nLogLevel)
{
case LOG_DEBUG:
_stprintf(tstrLogLevel,_T("%s"),_T("调试"));
break;
case LOG_INFO:
_stprintf(tstrLogLevel,_T("%s"),_T("信息"));
break;
case LOG_ERR:
_stprintf(tstrLogLevel,_T("%s"),_T("错误"));
break;
case LOG_EMERG:
_stprintf(tstrLogLevel,_T("%s"),_T("紧急"));
break;
default:
_stprintf(tstrLogLevel,_T("%s"),_T("未知"));
break;
}
return true;
}
bool _tGetLogFileName(TCHAR * strFileName,tm * pNowTm)
{
_stprintf(strFileName,_T("%s\\%04d%02d\\%04d%02d%02d.txt"),_T(LOG_FILE_DIR),
pNowTm->tm_year+1900,pNowTm->tm_mon+1,
pNowTm->tm_year+1900,pNowTm->tm_mon+1,pNowTm->tm_mday);
return true;
}
bool _tWriteLogFile(int nLogLevel,const TCHAR * tstrLog)
{
if(nLogLevel<g_nLogLevel)
return false;
tm aNowTm;
getLocalTime(&aNowTm);
char strFileName[_MAX_PATH] = {0};
if(!protectLogDir(strFileName,&aNowTm))
{
printf("创建目录失败\n");
return false;
}
getLogFileName(strFileName,&aNowTm);
protectLogFileSize(strFileName,&aNowTm);
TCHAR tstrFileName[_MAX_PATH] = {0};
_tGetLogFileName(tstrFileName,&aNowTm);
FILE * pFileW = _tfopen(tstrFileName,_T("a+,ccs= UTF-8"));
if(NULL == pFileW)
{
CString sInfo;
sInfo.Format(_T("文件打开失败"));
AfxMessageBox(sInfo);
return false;
}
TCHAR tstrTime[40] = {0};
_tGetLocalTimeStr(tstrTime,&aNowTm);
TCHAR tstrLogLevel[40] = {0};
_tGetLogLevelStr(tstrLogLevel,nLogLevel);
TCHAR tstrOut[80] = {0};
_stprintf(tstrOut,_T("%s:%s:"),tstrTime,tstrLogLevel);
_ftprintf(pFileW,_T("%s%s\n"),tstrOut,tstrLog);
fclose(pFileW);
return true;
}
_tWriteLogFile(LOG_ERR,_T("TCHAR 山"));
CString sInfo;
sInfo.Format(_T("CString sInfo 山 "));
_tWriteLogFile(LOG_DEBUG,sInfo);