1. 程式人生 > >vs2010配置安裝使用log4cplus日誌系統

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下


就會多出bin.Debug_Unicode

將編譯選項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.編寫簡單程式並測試

  1. #include "stdafx.h"
  2. #include <log4cplus/logger.h>
  3. #include <log4cplus/configurator.h>
  4. #include <iomanip>
  5. usingnamespace log4cplus;  
  6. int _tmain(int argc, _TCHAR* argv[])  
  7. {  
  8.     BasicConfigurator config;  
  9.     config.configure();  
  10.     Logger logger = Logger::getInstance("main");  
  11.     LOG4CPLUS_WARN(logger, "Hello, World!");  
  12.     getchar();  
  13.     return 0;  
  14. }  

注意:

log4cplus官方原始碼採用的“多位元組字符集”,如果你專案採用“使用 Unicode 字符集”則可以將log4cplus字符集修改後重新生成對應的庫檔案!

以下為常用的封裝好的測試例項:

VLog.h

  1. #pragma once
  2. #ifndef VLOG_H
  3. #define VLOG_H
  4. #include <log4cplus/logger.h>
  5. #include <log4cplus/layout.h>
  6. #include <log4cplus/loglevel.h>
  7. #include <log4cplus/fileappender.h>
  8. #include <log4cplus/consoleappender.h>
  9. #include <log4cplus/helpers/loglog.h>
  10. usingnamespace log4cplus;  
  11. usingnamespace helpers;  
  12. /** 
  13.  * 使用log4cplus 
  14.  * @param logfile 記錄的檔案路徑,如“main.log” 
  15.  * @param format 格式化字首,預設%d [%l] %-5p : %m %n 
  16.  * @param bebug 是否列印bebug資訊,預設true 
  17.  * @param lv 設定日記級別 
  18.  * @return  
  19.  */
  20. void InitLog4cplus(  
  21.         constwchar_t* logfile,  
  22.         constbool console = true,  
  23.         constbool bebug = true,  
  24.         LogLevel lv = DEBUG_LOG_LEVEL,  
  25.         constwchar_t* format = L"%d : %m%n"/*%d %-5p [%c < %l] : %m %n*/
  26.         );  
  27. /** 
  28.  * 獲得根日誌 
  29.  * @return  
  30.  */
  31. Logger GetRootLogger(void);  
  32. /** 
  33.  * 獲得子日誌 
  34.  * @param child 子日誌名,如,sub;sub.sub1 
  35.  * @return  
  36.  */
  37. Logger GetSubLogger(constwchar_t* sub);  
  38. /** 
  39.  * 關閉日誌系統 
  40.  */
  41. void ShutdownLogger(void);  
  42. #endif  /* VLOG_H */


VLog.cpp

  1. /************************************************************************/
  2. /* 使用規則:                                                             */
  3. /* 需要log4cplus動態/靜態連結庫及標頭檔案                                      */
  4. /* log4cplus.lib + log4cplus.dll 為動態連結庫。log4cplusS.lib為靜態連結庫    */
  5. /************************************************************************/
  6. #include "VLog.h"
  7. void InitLog4cplus(constwchar_t* logfile, constbool console, constbool bebug,  
  8.         LogLevel lv, constwchar_t* format)  
  9. /* 
  10. NOT_SET_LOG_LEVEL               (   -1) :接受預設的LogLevel,如果有父logger則繼承它的 
  11. LogLevelALL_LOG_LEVEL           (    0) :開放所有log資訊輸出 
  12. TRACE_LOG_LEVEL                 (    0) :開放trace資訊輸出(即ALL_LOG_LEVEL) 
  13. DEBUG_LOG_LEVEL                 (10000) :開放debug資訊輸出 
  14. INFO_LOG_LEVEL                  (20000) :開放info資訊輸出 
  15. WARN_LOG_LEVEL                  (30000) :開放warning資訊輸出 
  16. ERROR_LOG_LEVEL                 (40000) :開放error資訊輸出 
  17. FATAL_LOG_LEVEL                 (50000) :開放fatal資訊輸出 
  18. OFF_LOG_LEVEL                   (60000) :關閉所有log資訊輸出 
  19.  */ {  
  20.     // 0.日誌系統配置:設定顯示debug資訊
  21.     LogLog::getLogLog()->setInternalDebugging(bebug);  
  22.     // 建立螢幕輸出Appender,不採用stderror流,不採用立刻寫入模式
  23.     SharedAppenderPtr pappender1(new RollingFileAppender(logfile, 1024 * 1024 * 200, 50, false));  
  24.     // 生成的日誌檔名稱,檔案最大值(最小1 * 200 M),擴充套件50檔案個數,不採用立刻寫入模式
  25.     // 2.例項化一個layout物件
  26.     // 2.1建立layout佈局格式
  27.     std::auto_ptr<Layout> playout1(new PatternLayout(format));  
  28.     // 3.將layout物件繫結(attach)到appender物件
  29.     // pappender.setLayout(std::auto_ptr<Layout> layout);
  30.     pappender1->setLayout(playout1);  
  31.     // 4.Logger :記錄器,儲存並跟蹤物件日誌資訊變更的實體,當你需要對一個物件進行記錄時,就需要生成一個logger。
  32.     Logger rootLogger = Logger::getRoot();  
  33.     // 5.將appender物件繫結(attach)到logger物件,如省略此步驟,標準輸出(螢幕)appender物件會繫結到logger
  34.     rootLogger.addAppender(pappender1);  
  35.     if (console) {  
  36.         // 1.Appenders :掛接器,與佈局器緊密配合,將特定格式的訊息輸出到所掛接的裝置終端 (如螢幕,檔案等等)。
  37.         SharedAppenderPtr pappender2(new ConsoleAppender(falsefalse));  
  38.         std::auto_ptr<Layout> playout2(new PatternLayout(format));  
  39.         pappender2->setLayout(playout2);  
  40.         rootLogger.addAppender(pappender2);  
  41.     }  
  42.     // 6.設定logger的優先順序,如省略此步驟,各種有限級的訊息都將被記錄
  43.     rootLogger.setLogLevel(lv);  
  44. }  
  45. Logger GetRootLogger(void) {  
  46.     return Logger::getRoot();  
  47. }  
  48. Logger GetSubLogger(constwchar_t* sub) {  
  49.     return Logger::getInstance(sub);  
  50. }  
  51. void ShutdownLogger(void) {  
  52.     Logger::getRoot().shutdown();  
  53. }  


Main.cpp

  1. <p>#include "VLog.h"</p><p>int _tmain(int argc, _TCHAR* argv[])  
  2. {  
  3.  // 加入log4cplus
  4.  // 初始化log4cplus
  5.  InitLog4cplus(L"main.log");</p><p> // 日誌物件:測試一
  6.  log4cplus::Logger test1 = GetSubLogger(L"test1");  
  7.  // 日誌物件:測試一 第一次測試
  8.  log4cplus::Logger test1_01 = GetSubLogger(L"test1.01");</p><p> // 型別日誌記錄
  9.  LOG4CPLUS_DEBUG(test1_01, "you can log like this :" << "hello " << 100 << '!');</p><p> // 關閉日誌
  10.  ShutdownLogger();  
  11. }  
  12. </p>