開源日誌log4cplus-1.2.0使用1
網上的方法不能照搬,這裡總結下,實測有效。
1 Log4cplus簡介
log4cplus是C++編寫的開源的日誌系統,前身是java編寫的log4j系統,受Apache Software License保護,作者是Tad E. Smith。
log4cplus具有執行緒安全、靈活、以及多粒度控制的特點,通過將日誌劃分優先順序使其可以面向程式除錯、執行、測試、和維護等全生命週期。你可以選擇將日誌輸出到螢幕、檔案、NT event log、甚至是遠端伺服器;通過指定策略對日誌進行定期備份等等。
2 安裝方法
只講windows下的:linux下的沒有實際測試,就不寫了。
下載壓縮包:log4cplus-1.2.0.7z
解壓縮,進入log4cplus-1.2.0\msvc10\
用vs2010編譯log4cplus.sln,生成lib及dll,目錄在log4cplus-1.2.0\msvc10\Win32\bin.Debug
3,測試:
用vs2010寫測試程式,把include資料夾及庫檔案都放到你測試程式的工程下,設定好包含目錄,庫目錄。
編寫測試程式:實測可執行
#include <log4cplus/logger.h> #include <log4cplus/consoleappender.h> #include <log4cplus/layout.h> #include <log4cplus/helpers/sleep.h> #include <log4cplus/loggingmacros.h> #pragma comment(lib,"../lib/log4cplusD.lib") using namespace log4cplus; using namespace log4cplus::helpers; int main() { /* step 1: 設定一個輸出物件,就是在哪裡輸出日誌,螢幕就是console */ SharedObjectPtr<Appender> _append (new ConsoleAppender()); _append->setName(LOG4CPLUS_TEXT("append for test")); /* step 2: 設定一個日誌輸出格式的物件 ,這裡格式為時間 工作目錄檔案,行以及換行 */ //std::string pattern = "%d{%m/%d/%y %H:%M:%S} - %m [%l]%n"; log4cplus::tstring pattern = LOG4CPLUS_TEXT("%d{%m/%d/%y %H:%M:%S} - %m [%l]%n"); std::auto_ptr<Layout> _layout(new PatternLayout(pattern)); /* step 3: 繫結螢幕和格式物件 */ _append->setLayout( _layout ); /* step 4: 設定一個日誌物件,還有名字 */ Logger _logger = Logger::getInstance(LOG4CPLUS_TEXT("test")); /* step 5: 繫結日誌物件和螢幕 */ _logger.addAppender(_append); /* step 6: Se設定日誌優先順序,應該是列印那些級別的日誌 */ _logger.setLogLevel(ALL_LOG_LEVEL); /* log activity */ LOG4CPLUS_DEBUG(_logger, "This is the FIRST log message..."); log4cplus::helpers::sleep(1); LOG4CPLUS_WARN(_logger, "This is the SECOND log message..."); return 0; }
也就是使用這個日誌一般有6個步驟,但是也不是必須的。
4,書面解釋:類名 說明
Filter 過濾器,過濾輸出訊息。
Layout 佈局器,控制輸出訊息的格式。
Appender 掛接器,與佈局器和過濾器緊密配合,將特定格式的訊息過濾後輸出到所掛接的裝置終端如螢幕,檔案等等)。
Logger 記錄器,儲存並跟蹤物件日誌資訊變更的實體,當你需要對一個物件進行記錄時,就需要生成一個logger。
Hierarchy 分類器,層次化的樹型結構,用於對被記錄資訊的分類,層次中每一個節點維護一個logger的所有資訊。
LogLevel 優先權,包括TRACE, DEBUG, INFO, WARNING, ERROR, FATAL。
基本步驟
使用log4cplus有六個基本步驟:
例項化一個封裝了輸出介質的appender物件;
例項化一個封裝了輸出格式的layout物件;
將layout物件繫結(attach)到appender物件;
如省略此步驟,簡單佈局器SimpleLayout(參見5.1小節)物件會繫結到logger。
例項化一個封裝了日誌輸出logger物件,並呼叫其靜態函式getInstance()獲得實
例,log4cplus::Logger::getInstance("logger_name");
將appender物件繫結(attach)到logger物件;
設定logger的優先順序,如省略此步驟,各種有限級的日誌都將被輸出。