【C++】實現日誌系統(含源碼)__C++

來源:互聯網
上載者:User

最近在做遊戲開發,閱讀了一些源碼後做了一些總結與記錄,希望對自己和其他的朋友有所協助。軟體開發中常常將關鍵的操作、一般性警告以及嚴重的錯誤,通過字串的形式輸出至記錄檔,本子系統實現bootlog,debuglog,warning,fatallog等輸出形式,支援多線程。有不到之處歡迎指正,交流。email:caohaitao_linux@163.com

LoLog日誌系統關鍵知識

1.檔案操作

2.擷取目前時間的字串

3.變參函數的處理


LoLog組成要素

1.檔案指標

2.檔案狀態(可省)

3.互斥鎖

註:檔案狀態可以通過判斷檔案指標是否為空白來獲得,但此過程使用頻繁,以函數調用形式會使得壓棧彈、棧操作過多。static int佔用空間較少,變數見名知意使用方便,最好不要省略檔案狀態變數

UML圖:


檔案開啟操作

int LoLogs::OpenLog(const char *pcLogLead){int nRet = 0;if(m_nFileStatus == FILESTATUS_CLOSE){char szOpenPathName[MAXSIZE_PATHNAME] = {0};time_tltime;tmtmStruct;time(<ime);tmStruct = *localtime(<ime);strcat(szOpenPathName, SUBDIRNAME_LOG);sprintf(szOpenPathName + strlen(szOpenPathName), "%s%04d-%02d-%02d.log",pcLogLead, tmStruct.tm_year+1900,tmStruct.tm_mon+1,tmStruct.tm_mday);#ifdef WIN32CreateDirectory(SUBDIRNAME_LOG, NULL);#else /* LINUX */mkdir(SUBDIRNAME_LOG, 0700);#endifm_fileSvrLog = fopen(szOpenPathName, "a+");if(m_fileSvrLog) {m_nFileStatus = FILESTATUS_OPEN;}else{nRet = -1;}}return nRet;}

擷取目前時間的字串

// CLogs class member functionsconst char *LoLogs::GetCurDateTimeWithString(char *pStringBuf){time_ttCurDateTime;tm*ptagCurDataTime;charszTimeStringBuf[MAXSIZE_TIMESTRING] = {0};char *pWriteStringBuf = pStringBuf;if(NULL == pWriteStringBuf){pWriteStringBuf = szTimeStringBuf;}time(&tCurDateTime);ptagCurDataTime = localtime(&tCurDateTime);sprintf(pWriteStringBuf, "%d-%02d-%02d %02d:%02d:%02d", ptagCurDataTime->tm_year+1900, ptagCurDataTime->tm_mon+1, ptagCurDataTime->tm_mday, ptagCurDataTime->tm_hour, ptagCurDataTime->tm_min, ptagCurDataTime->tm_sec);return pWriteStringBuf;}

變參函數的處理

void LoLogs::WriteLog(const char *pcLogMsg, ...){char szMsgBuf[MAXSIZE_MSGBUF] = {0};va_list va;va_start(va, pcLogMsg);vsprintf(szMsgBuf, pcLogMsg, va);#ifdef WIN32printf( szMsgBuf );#endifva_end(va);WriteLogInner(szMsgBuf, LOGLEADNAME_BOOT);}

c++實現日誌系統源碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.