vs2010配置安裝使用log4cplus日誌系統
log4cplus是C++編寫的開源的日誌系統,功能非常全面,用到自己開發的工程中會比較專業的,:),本文介紹了log4cplus基本概念,以及如何安裝,配置。
### 簡介 ###
log4cplus是C++編寫的開源的日誌系統,前身是java編寫的log4j系統.受Apache Software License保護。作者是Tad E. Smith。log4cplus具有執行緒安全、靈活、以及多粒度控制的特點,通過將資訊劃分優先順序使其可以面向程式除錯、執行、測試、和維護等全生命週期; 你可以選擇將資訊輸出到螢幕、檔案、NT event log、甚至是遠端伺服器;通過指定策略對日誌進行定期備份等等。
### 下載 ###
最新的log4cplus可以從以下網址下載 http://sourceforge.net/projects/log4cplus/
選擇生成 生成解決方案
2. windows下的配置
開啟MSVC10資料夾
vs2010開啟 log4cplus.sln
編譯選項 選擇 Debug win32_unicode
資料夾log4cplus-1.2.0-rc3\msvc10\Win32下
將編譯選項Debug 改成Release就生成release版本
在這個資料夾下
有log4cplusSUD.lib
log4cplusUD.dll
log4cplusUD.lib
將其複製到log4資料夾根目錄下新建資料夾lib
4。在環境配置完成後,我們可以對具體的專案環境進行配置。
log4cplus
包含目錄 D:\CPP\log4cplus-1.2.0-rc3\include
庫目錄D:\CPP\log4cplus-1.2.0-rc3\lib
聯結器
log4cplusSUD.lib
log4cplusUD.lib
我們建立一個控制檯專案,並進行如下配置:
1。採用靜態連結庫:
右鍵專案->屬性->
加入log4cplusSD.lib
注意:才用靜態連結庫,可以刪除bin目錄下的log4cplusD.dll 以及lib目錄下的log4cplusD.lib 2個檔案。
2。採用動態連結庫:
右鍵專案->屬性->
注意:才用動態連結庫,需要bin目錄下的log4cplusD.dll 以及lib目錄下的log4cplusD.lib 2個檔案。可以刪除lib目錄下的log4cplusSD.lib 檔案
5.編寫簡單程式並測試
- #include "stdafx.h"
- #include <log4cplus/logger.h>
- #include <log4cplus/configurator.h>
- #include <iomanip>
- usingnamespace log4cplus;
- int _tmain(int argc, _TCHAR* argv[])
- {
- BasicConfigurator config;
- config.configure();
- Logger logger = Logger::getInstance("main");
- LOG4CPLUS_WARN(logger, "Hello, World!");
- getchar();
- return 0;
- }
注意:
log4cplus官方原始碼採用的“多位元組字符集”,如果你專案採用“使用 Unicode 字符集”則可以將log4cplus字符集修改後重新生成對應的庫檔案!
以下為常用的封裝好的測試例項:
VLog.h
- #pragma once
- #ifndef VLOG_H
- #define VLOG_H
- #include <log4cplus/logger.h>
- #include <log4cplus/layout.h>
- #include <log4cplus/loglevel.h>
- #include <log4cplus/fileappender.h>
- #include <log4cplus/consoleappender.h>
- #include <log4cplus/helpers/loglog.h>
- usingnamespace log4cplus;
- usingnamespace helpers;
- /**
- * 使用log4cplus
- * @param logfile 記錄的檔案路徑,如“main.log”
- * @param format 格式化字首,預設%d [%l] %-5p : %m %n
- * @param bebug 是否列印bebug資訊,預設true
- * @param lv 設定日記級別
- * @return
- */
- void InitLog4cplus(
- constwchar_t* logfile,
- constbool console = true,
- constbool bebug = true,
- LogLevel lv = DEBUG_LOG_LEVEL,
- constwchar_t* format = L"%d : %m%n"/*%d %-5p [%c < %l] : %m %n*/
- );
- /**
- * 獲得根日誌
- * @return
- */
- Logger GetRootLogger(void);
- /**
- * 獲得子日誌
- * @param child 子日誌名,如,sub;sub.sub1
- * @return
- */
- Logger GetSubLogger(constwchar_t* sub);
- /**
- * 關閉日誌系統
- */
- void ShutdownLogger(void);
- #endif /* VLOG_H */
VLog.cpp
- /************************************************************************/
- /* 使用規則: */
- /* 需要log4cplus動態/靜態連結庫及標頭檔案 */
- /* log4cplus.lib + log4cplus.dll 為動態連結庫。log4cplusS.lib為靜態連結庫 */
- /************************************************************************/
- #include "VLog.h"
- void InitLog4cplus(constwchar_t* logfile, constbool console, constbool bebug,
- LogLevel lv, constwchar_t* format)
- /*
- NOT_SET_LOG_LEVEL ( -1) :接受預設的LogLevel,如果有父logger則繼承它的
- LogLevelALL_LOG_LEVEL ( 0) :開放所有log資訊輸出
- TRACE_LOG_LEVEL ( 0) :開放trace資訊輸出(即ALL_LOG_LEVEL)
- DEBUG_LOG_LEVEL (10000) :開放debug資訊輸出
- INFO_LOG_LEVEL (20000) :開放info資訊輸出
- WARN_LOG_LEVEL (30000) :開放warning資訊輸出
- ERROR_LOG_LEVEL (40000) :開放error資訊輸出
- FATAL_LOG_LEVEL (50000) :開放fatal資訊輸出
- OFF_LOG_LEVEL (60000) :關閉所有log資訊輸出
- */ {
- // 0.日誌系統配置:設定顯示debug資訊
- LogLog::getLogLog()->setInternalDebugging(bebug);
- // 建立螢幕輸出Appender,不採用stderror流,不採用立刻寫入模式
- SharedAppenderPtr pappender1(new RollingFileAppender(logfile, 1024 * 1024 * 200, 50, false));
- // 生成的日誌檔名稱,檔案最大值(最小1 * 200 M),擴充套件50檔案個數,不採用立刻寫入模式
- // 2.例項化一個layout物件
- // 2.1建立layout佈局格式
- std::auto_ptr<Layout> playout1(new PatternLayout(format));
- // 3.將layout物件繫結(attach)到appender物件
- // pappender.setLayout(std::auto_ptr<Layout> layout);
- pappender1->setLayout(playout1);
- // 4.Logger :記錄器,儲存並跟蹤物件日誌資訊變更的實體,當你需要對一個物件進行記錄時,就需要生成一個logger。
- Logger rootLogger = Logger::getRoot();
- // 5.將appender物件繫結(attach)到logger物件,如省略此步驟,標準輸出(螢幕)appender物件會繫結到logger
- rootLogger.addAppender(pappender1);
- if (console) {
- // 1.Appenders :掛接器,與佈局器緊密配合,將特定格式的訊息輸出到所掛接的裝置終端 (如螢幕,檔案等等)。
- SharedAppenderPtr pappender2(new ConsoleAppender(false, false));
- std::auto_ptr<Layout> playout2(new PatternLayout(format));
- pappender2->setLayout(playout2);
- rootLogger.addAppender(pappender2);
- }
- // 6.設定logger的優先順序,如省略此步驟,各種有限級的訊息都將被記錄
- rootLogger.setLogLevel(lv);
- }
- Logger GetRootLogger(void) {
- return Logger::getRoot();
- }
- Logger GetSubLogger(constwchar_t* sub) {
- return Logger::getInstance(sub);
- }
- void ShutdownLogger(void) {
- Logger::getRoot().shutdown();
- }
Main.cpp
- <p>#include "VLog.h"</p><p>int _tmain(int argc, _TCHAR* argv[])
- {
- // 加入log4cplus
- // 初始化log4cplus
- InitLog4cplus(L"main.log");</p><p> // 日誌物件:測試一
- log4cplus::Logger test1 = GetSubLogger(L"test1");
- // 日誌物件:測試一 第一次測試
- log4cplus::Logger test1_01 = GetSubLogger(L"test1.01");</p><p> // 型別日誌記錄
- LOG4CPLUS_DEBUG(test1_01, "you can log like this :" << "hello " << 100 << '!');</p><p> // 關閉日誌
- ShutdownLogger();
- }
- </p>