前段時間,由於工作需要,需開發乙個新的日誌類,要求將服務端所處理的有關同乙個請求的所有日誌全部記錄在乙個json中,以方便日誌收集與查詢、分析。像以前那樣處理到某一步列印一條日誌的方式便不再可行了。
乙個請求由於中間有好多處理過程,而且不盡相同,要求將這些處理產生的日誌都列印在一起,最先想到的自然就是設計乙個新的日誌類,裡邊有乙個buffer,在收到請求時建立乙個該類的物件,然後所有的請求日誌都通過該類寫入buffer,而實際寫入日誌檔案則是在該類的析構函式中進行,也就達到了一次性寫入的目的。
//請求日誌記錄類,每條請求新增一條日誌記錄的物件
class
requestlogger
;
~requestlogger()
requestlogger& operator
<<(std::string
s)
requestlogger& operator
<<(int
i)
catch(boost::bad_lexical_cast&e)
}void addlog(loglevel level, const
char* filename, const
intline)
;struct
tm tm_time;
gmtime_r(&seconds,&tm_time);
snprintf(buf,
sizeof(buf), "
%4d-%02d-%02d %02d:%02d:%02d.%06d",
tm_time.tm_year + 1900, tm_time.tm_mon + 1
, tm_time.tm_mday,
tm_time.tm_hour, tm_time.tm_min, tm_time.tm_sec,
tv.tv_usec);
tmp[
"time
"] = std::string
(buf);
tmp[
"content
"] =m_buf;
switch
(level)
m_value[
"processlog
" m_buf = ""
;
}private
: std::
string
m_buf;
json::value m_value;
};
通過過載operator << 操作符,對日誌寫入進行了方便對日誌進行寫入,然後,再定義addlog函式,將buf中的內容轉換到json變數中,最後在析構時呼叫loggerwriter單例類去寫入日誌檔案。為方便使用,定義以下巨集來使用。
#define request_trace(logger_ptr, logstream) ((*logger_ptr) << logstream).addlog(requestlogger::loglevel::trace, __file__, __line__);#define request_debug(logger_ptr, logstream) ((*logger_ptr) << logstream).addlog(requestlogger::loglevel::debug, __file__, __line__);
#define request_info(logger_ptr, logstream) ((*logger_ptr) << logstream).addlog(requestlogger::loglevel::info, __file__, __line__);
#define request_warn(logger_ptr, logstream) ((*logger_ptr) << logstream).addlog(requestlogger::loglevel::warn, __file__, __line__);
#define request_error(logger_ptr, logstream) ((*logger_ptr) << logstream).addlog(requestlogger::loglevel::error, __file__, __line__);
記錄日誌使用如下:
std::shared_ptrptr_logger(newrequestlogger());
request_info(ptr_logger,
"基本預處理後:
"<< tmp_query);
還是蠻方便的。
乙個簡單的日誌類
放乙個以前做的,一直用著的日誌類。比較短,也不用碼很多字去說明,如下 1 2 日誌類 log.cs34 5 用法 6 ningtao.log mylog new ningtao.log 日誌名稱 7 mylog.addlog 日誌資訊 8 新增一條日誌時 9 目錄結構 日誌名稱 年月 日.log 1...
乙個簡單的日誌封裝類
記錄乙個自己封裝的日誌類,不完善的地方,望指點。其中,包含寫檔案和輸出到終點,定義日誌等級,定義日誌儲存檔案時間間隔,日誌檔案個數等 並統一日誌輸出格式 檔名,方法名等資訊 import logging from logging import handlers class logger object...
乙個簡單可用的C 日誌類
少廢話,直接看東西。pragma once include define log buffer size 1024 class logwriter include logwriter.h include include include include logwriter logwriter cons...