前言
項目實現過程中,需要檢查、查找或者調試程序bug等,此時程序日志則較為清晰地展現代碼的運行過程。目前接觸到的方法有打印消息到控制台,將重要信息輸出到某個文件比如txt文件,或者直接使用日志庫。
為了方便移植,采用日志庫的方式,目前主流的日志庫有log4j、glog、log4cpp等等,本文采用log4cpp日志庫。
實現步驟
1.下載源代碼包;
2.編譯鏈接;
3.配置環境變量;
4.簡單實例;
實現環境
系統環境:win7 64bit
開發環境:vs2013
軟件版本:log4cpp-1.1.2.tar.gz
實現過程
1.下載源碼包;
下載地址(本文下載鏈接):
https://sourceforge.net/projects/log4cpp/
下載完成之后解壓即可;
log4cpp主頁:
http://log4cpp.sourceforge.net/
源碼包文件如下圖所示:
2.編譯鏈接;
將文件夾中的msvc10文件夾復制到當前目錄下,並將文件夾重命名為msvc11,同時將文件夾內的解決方案改為msvc11.sln;
該解決方案包含多個工程項目,有log4cpp靜態庫、log4cppLIB動態庫以及一項相應的demo工程。本文使用的是log4cppLIB靜態庫,分別在release和debug模式下進行編譯鏈接生成相應的庫文件。
為方便,將需要的頭文件和庫文件復制到某一個新建的文件夾中(C:\Program Files\log4cpp)。
1)庫文件:將log4cppLIB生成的庫文件log4cppD.lib(Debug模式)、log4cppLIB.lib(Release模式) 復制到 C:\Program Files\log4cpp\lib文件夾;
2)頭文件:將該庫用到的庫文件.\log4cpp\include文件夾復制到C:\Program Files\log4cpp文件夾中;
工程文件如下圖所示:
注意:
3.配置環境及屬性;
1)環境變量;
為了代碼的可在不同的電腦進行編譯,避免引用問題,建議使用環境變量對文件引用路徑進行配置。
> 打開系統的環境變量中在用戶變量中添加:
變量名:LOG4CPP_ROOT
變量值:C:\Program Files\log4cpp
> 在系統環境變量的系統變量path值中添加
變量值:;%LOG4CPP_ROOT%\lib
注意:重啟電腦配置的環境變量生效。
2)VS項目屬性;
分別配置VS項目Debug和Release模式的屬性;
(1)打開項目屬性頁面,VC++目錄選項常規下的包含目錄,新建添加為$(LOG4CPP_ROOT)\include;
(2)打開項目屬性頁面,VC++目錄選項常規下的庫目錄,新建添加為$(LOG4CPP_ROOT)\lib;
(3)打開項目屬性頁面,鏈接器輸入選項下的附加依賴項,添加log4cppD.lib(Debug模式);或者log4cppLIB.lib(Release模式);
注意:
4.簡單實例;
//FileAppenderExam: #include <iostream> #include <log4cpp/Category.hh> #include <log4cpp/Appender.hh> #include <log4cpp/FileAppender.hh> #include <log4cpp/Priority.hh> #include <log4cpp/PatternLayout.hh> #include <log4cpp/RollingFileAppender.hh> using namespace std; int main(int argc, char* argv[]) { log4cpp::PatternLayout* pLayout1 = new log4cpp::PatternLayout();//創建一個Layout; pLayout1->setConversionPattern("%d: %p %c %x: %m%n");//指定布局格式; log4cpp::PatternLayout* pLayout2 = new log4cpp::PatternLayout(); pLayout2->setConversionPattern("%d: %p %c %x: %m%n"); log4cpp::Appender* fileAppender = new log4cpp::FileAppender("fileAppender", "wxb.log");//創建一個Appender; fileAppender->setLayout(pLayout1);//將指定的Layout添加到Appender; log4cpp::RollingFileAppender* rollfileAppender = new log4cpp::RollingFileAppender( "rollfileAppender", "rollwxb.log", 5 * 1024, 1); rollfileAppender->setLayout(pLayout2); log4cpp::Category& root = log4cpp::Category::getRoot().getInstance("RootName");//從系統中得到Category的根; root.addAppender(fileAppender);//將Appender添加到Category; root.addAppender(rollfileAppender); root.setPriority(log4cpp::Priority::DEBUG);//設置Category的優先級; //開始記錄日志; for (int i = 0; i < 100; i++) { string strError; ostringstream oss; oss << i << ":Root Error Message!"; strError = oss.str(); root.error(strError); } log4cpp::Category::shutdown();//關閉Category; return 0; }
參考
1.log4cpp的使用:http://blog.csdn.net/xinhuo11/article/details/11061137;
2.基於LGPL開源項目 Log4cpp安裝與使用:
http://tech.it168.com/a2011/0408/1175/000001175907_all.shtml
3.http://www.voidcn.com/blog/sf2gis2/article/p-5704173.html
4.https://sourceforge.net/projects/log4cpp/files/
5.http://www.cnblogs.com/sanghg/p/4203153.html
6.https://sourceforge.net/projects/log4cpp/
7.log4cpp主頁:http://log4cpp.sourceforge.net/
完
做自己該做的事情,做自己喜歡做的事情,安靜做一枚有思想的技術媛。