VOID CLogFile::MakeLogfilenameWithPostfix() { DateTime now; _snprintf(m_szLogFileName,MAX_FILE_NAME, "%s/%s_%.4d%.2d%.2d_%.2d%.2d%.2d_%.2d.log", m_szFilePath, m_szFileName, now.GetYear(), now.GetMonth(), now.GetDay(), now.GetHour(), now.GetMinute(), now.GetSecond(), now.GetMilliSecond()); }
VOID CLogFile::CacheLog(enum_LOG_LEVEL logLevel, const CHAR* pLogString , ... ) { //等级太低,不需打印控制台和文件 if (logLevel < m_eConsoleLogLevel && logLevel < m_eFileLogLevel) { return ; } CHAR szLine[MAX_LOG_LINE] = {0}; va_list va; va_start(va,pLogString); #ifdef __LINUX vsprintf(szLine,pLogString,va); #else vsprintf_s(szLine,MAX_LOG_LINE,pLogString,va); #endif va_end(va); DateTime now; CHAR szLogStr[MAX_LOG_LINE] = {'\0'}; _snprintf(szLogStr, MAX_LOG_LINE-1, "%2d/%02d/%02d %02d:%02d:%02d.%03d tId:%ld %s\n", now.GetYear(), now.GetMonth(), now.GetDay(), now.GetHour(), now.GetMinute(), now.GetSecond(), now.GetMilliSecond(), GetThreadID(), szLine); //高等与控制台等级,则打印到控制台 if (logLevel >= m_eConsoleLogLevel) { printf("%s", szLogStr); } //高等与文件等级,则打印到文件 if (logLevel >= m_eFileLogLevel) { CSmartLock sLock(m_lock); int strLength = strlen(szLogStr); if (m_pWriteBuf + strLength - m_pFrontBuf >= LOG_BUF_LEN) { //front 缓冲满了 if (m_bBackBufAvailable) { //两块全满了,这条要丢。 printf("LOG LOST!!, %s", szLogStr); return; } //back空着,将front交换到back SwitchBuf(); } //写入front strcpy( m_pWriteBuf, szLogStr ); m_pWriteBuf += strLength; } }
VOID CLogFile::DiskLog(enum_LOG_LEVEL logLevel, const CHAR* pLogString , ...) { //等级太低,不需打印控制台和文件 if (logLevel < m_eConsoleLogLevel && logLevel < m_eFileLogLevel) { return ; } CHAR szLine[MAX_LOG_LINE] = {0}; va_list va; va_start(va,pLogString); #ifdef __LINUX vsprintf(szLine,pLogString,va); #else vsprintf_s(szLine,MAX_LOG_LINE,pLogString,va); #endif va_end(va); DateTime now; CHAR szLogStr[MAX_LOG_LINE] = {'\0'}; _snprintf(szLogStr, MAX_LOG_LINE, "%2d/%02d/%02d %02d:%02d:%02d.%03d tId:%ld %s\n", now.GetYear(), now.GetMonth(), now.GetDay(), now.GetHour(), now.GetMinute(), now.GetSecond(), now.GetMilliSecond(), GetThreadID(), szLine); //高等与控制台等级,则打印到控制台 if (logLevel >= m_eConsoleLogLevel) { printf("%s", szLogStr); } //高等与文件等级,则打印到文件 if (logLevel >= m_eFileLogLevel) { CSmartLock sLock(m_lock); INT nLogStrLen = strlen(szLogStr); if ((m_bBackBufAvailable) && (m_pWriteBuf + nLogStrLen - m_pFrontBuf >= LOG_BUF_LEN)) { //如果back有东西, front还写不下,就要写2次文件了,不过这种情况应该很少 WriteBackBufToFile(); } if (m_pWriteBuf + nLogStrLen - m_pFrontBuf >= LOG_BUF_LEN) { //front写不下,那么back肯定空着 SwitchBuf(); } //写入front strcpy( m_pWriteBuf, szLogStr ); m_pWriteBuf += nLogStrLen; //全写入文件中 WriteAllBufToFile(); } }