void CTonyXiaoLog::MakeFileName(void) //创造一个新文件名 { char szTemp[LOG_ITEM_LENGTH_MAX]; //临时缓冲区 MakeATimeString(szTemp, LOG_ITEM_LENGTH_MAX); //获得时间戳字符串 FixFileInfo(); //维护文件总个数不超标(默认72 个) int nLen = SafePrintf( //注意看这句,利用构造函数中的种子名字 m_szFileName, //加上时间戳,后面再加上“.log”后缀 FILENAME_STRING_LENGTH * 2, //生成日志文件名 "%s_%s.log", m_szFilePath, szTemp); nLen++; //习惯,长度+1,保留最后’\0’的位置 //将新的文件名添加到队列 int nAddLastRet = m_pFileInfoQueue->AddLast(m_szFileName, nLen); if (0 >= nAddLastRet) { //这是一个特殊的防护,如果队列满了(内存不够用),删除最开始三个文件名 //释放内存空间,这是预防服务器业务太繁忙,导致内存不够用,队列无法添加的 //规避措施,这也体现非关键模块为关键业务模块让路的思维 DeleteFirstFile(); DeleteFirstFile(); DeleteFirstFile(); //删除三个之后,重新尝试添加 nAddLastRet = m_pFileInfoQueue->AddLast(m_szFileName, nLen); //如果此时添加仍然失败,投降,日志发生一点错乱没有关系。 } m_nFileSize = 0; //新文件创建,文件长度为0 //下面逻辑,新创建一个文件,在文件头先打印一点文件名相关信息,帮助以后的跟踪查找 time (&m_tFileNameMake); { //由于这是非业务打印,因此不希望输出到屏幕,这里临时将屏幕开关关闭 bool bPrint2Scr = m_bPrintf2ScrFlag; m_bPrintf2ScrFlag = false; _Printf("Tony.Xiao. base libeary log file %s\n", m_szFileName); _Printf("-----------------------------------------------\n"); m_bPrintf2ScrFlag = bPrint2Scr; //输出完毕,屏幕开关恢复原值 } }
void CNEOLog::MakeFileName(void) { char szTemp[LOG_ITEM_LENGTH_MAX] = "\0"; MakeATimeString(szTemp,LOG_ITEM_LENGTH_MAX); //获得时间戳字符串 FixFileInfo(); //维护文件总个数(默认72个) int nLen=SafePrintf(m_szFileName,(FILENAME_STRING_LENGTH*2),"%s_%s.log",m_szFilePath,szTemp);//生成日志文件名 nLen++; //将新的文件名添加到队列 int nAddLastRet=m_pFileInfoQueue->AddLast(m_szFileName,nLen); if(0>=nAddLastRet) { //为防止队列满了,删除对头的三个名字 DeleteFirstFile(); DeleteFirstFile(); DeleteFirstFile(); //重新添加 nAddLastRet=m_pFileInfoQueue->AddLast(m_szFileName,nLen); } m_nFileSize=0; //新建文件,长度为0 //新建文件,在文件头打印一些信息 time(&m_tFileNameMake); { bool bPrintToScr=m_bPrintfToScrFlag; m_bPrintfToScrFlag=false; _Printf("NEO.base lib log file %s\n",m_szFileName); _Printf("____________________________________\n"); m_bPrintfToScrFlag=bPrintToScr;//输出完毕,恢复标志 } }
void CNEOLog::FixFileInfo(void) { //int nAddLastRet=0; while(m_pFileInfoQueue->GetTokenCount()>=m_nHoldFileMax) { DeleteFirstFile(); } }
void CTonyXiaoLog::FixFileInfo(void) //维护文件总个数不超标 { int nAddLastRet = 0; //请注意,这里不是if,而是一个while,如果因某种原因,超标很多个文件 //利用这个循环技巧,很轻松地将超标文件删除到只有72 个, //很多时候,维护数组不超限,都是使用这个技巧 while (m_pFileInfoQueue->GetTokenCount() >= m_nHoldFileMax) { DeleteFirstFile(); } }