一步步入門log4cpp


前言

項目實現過程中,需要檢查、查找或者調試程序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/

做自己該做的事情,做自己喜歡做的事情,安靜做一枚有思想的技術媛。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM