使用log4cxx


在java中有log4j日志模塊,使用起來非常方便,在C++中也是有的,log4cxx就是log4j的c++移植版,機緣巧合之下今天想要使用一下這個日志模塊,所以記錄下自己從一開始下載安裝到成功使用的過程:

  • 首先是下載文件,一共有三個安裝包,apr、apr-util和log4cxx,可以去官網下載,地址分別為:
    • apr和apr-util:http://apr.apache.org/
    • log4cxx:http://logging.apache.org/log4cxx/latest_stable/download.html
  • 如果覺得麻煩也可以去我的網盤下載:http://pan.baidu.com/s/1o7PCR70
  • 然后開始安裝:
    • 安裝apr
    • 1 #首先解壓壓縮包
      2 $ tar -zxvf apr-1.5.2.tar.gz
      3 $ cd apr-1.5.2
      4 
      5 $ ./configure --prefix=/usr/local
      6 $ make
      7 $ sudo make install

       

    • 安裝apr-util
    • 1 #首先解壓壓縮包
      2 $ tar -zxvf apr-util-1.5.4.tar.gz
      3 $ cd apr-util-1.5.4
      4 
      5 $ ./configure --prefix=/usr/local --with-apr=/usr/local
      6 $ make
      7 $ sudo make install

       

    • 安裝log4cxx
    • 1 $ tar -zxvf apache-log4cxx-0.10.0.tar.gz  
      2 $ cd apache-log4cxx-0.10.0  
      3 $ ./configuer --prefix=/usr/local/ --with-apr=/usr/local/ --with-apr-util=/usr/local/  --with-charset=utf-8 --with-logchar=utf-8  
      4 $ make
      5 $ sudo make install

       

    • Tips:執行到這里的時候我這里報錯:
    • 1 inputstreamreader.cpp:66: error: 'memmove' was not declared in this scope  
      2 make[3]: *** [inputstreamreader.lo] 錯誤 1  
      #這是由於以下幾個文件缺少了標准庫文件,添加上就可以了
      3 src/main/cpp/inputstreamreader.cpp添加#include <string.h>  
      4 src/main/cpp/socketoutputstream.cpp添加#include <string.h>  
      5 src/examples/cpp/console.cpp添加#include <string.h>;#include <stdio.h>;

       

    • 添加完標准庫文件make之后整個log4cxx模塊就已經安裝完了,接下來就可以寫測試程序來測試是否成功了:測試程序如下:
    •  1 #include <log4cxx/logger.h>
       2 #include <log4cxx/basicconfigurator.h>
       3 #include <log4cxx/helpers/exception.h>
       4 #include <log4cxx/propertyconfigurator.h>
       5 
       6 using namespace log4cxx;
       7 using namespace log4cxx::helpers;
       8 
       9 LoggerPtr logger_file(Logger::getLogger("file"));//獲取配置文件中file對應的句柄
      10 LoggerPtr logger_file(Logger::getLogger("console"));//獲取配置文件中console對應的句柄
      11 
      12 int main(){
      13     PropertyConfigurator::configure("./log4cxx.properties");//加載配置文件,下面會細說
      14     LOG4CXX_INFO(logger_file,"This is a test");
      15   
      16     return 0;
      17 }

       

    • 那么這個配置文件到底是啥呢,其實日志模塊是會分為很多級別:建議使用的有四個level,分別是INFO、DEBUG、ERROR和WARN,level可以在配置文件中配置,用來控制程序中相應級別的日志的開關,比如配置文件中設置的INFO級別,那么程序中的DEBUG級別的日志就不會輸出
    • 配置文件是自己寫的,只要在程序中給出配置文件的路徑就可以:
    • log4cxx.properties:
    •  1 #設置日志level為INFO,fa為文件輸出對象,ca為控制台輸出對象
       2 log4j.rootLogger=INFO,fa,ca
       3 #設置日志對象
       4 log4j.logger.console=INFO,ca
       5 log4j.logger.file=INFO,fa
       6 #不向默認對象(rootLogger)輸出,因此信息只能輸出到文件
       7 log4j.additivity.file=false
       8 
       9 #**************************  
      10 #控制台,同時也會輸出到默認輸出對象  
      11 #**************************
      12 log4j.appender.ca=org.apache.log4j.ConsoleAppender  
      13 log4j.appender.ca.layout=org.apache.log4j.PatternLayout  
      14 log4j.appender.ca.layout.ConversionPattern=[%-5p][%d] : %m%n 
      15 
      16 #**************************  
      17 #設置日志文件信息,比如大小,時間格式
      18 #**************************  
      19 log4j.appender.fa=org.apache.log4j.DailyRollingFileAppender  
      20 log4j.appender.fa.File=./log/today.log  
      21 log4j.appender.fa.Append=fasle  
      22 log4j.appender.fa.MaxFileSize=10MB  
      23 log4j.appender.fa.MaxBackupIndex=1000  
      24 log4j.appender.fa.DatePattern=yyyy-MM-dd  
      25 log4j.appender.fa.layout=org.apache.log4j.PatternLayout  
      26 log4j.appender.fa.layout.ConversionPattern=[%-5p][%d] : %m%n                                                            

       

    • 接下來就可以編譯執行了:
    • 1 g++ test.cpp -o test 

       

    • 會發現大量的報錯,提示Undefined refrence ******,這是由於編譯需要連接一下log4cxx的庫文件,庫文件可以使用vs編譯生成,如果不想自己編譯的話也可以用我的:http://pan.baidu.com/s/1qYprlPa

    • 1 g++ test.cpp -o test -llog4cxx

       

    • 執行到這里,居然還是報錯,這次是報錯:error while loading shared libraries: liblog4cxx.so.10: cannot open shared object file: No such file or directory,這個報錯是因為在/usr/local/lib下有liblog4cxx.so.10文件,而沒有設置LD_LIBRARY_PATH環境變量造成的,所以只需要配置一下環境變量即可:
    • 1 export LD_LIBRARY_PATH=/usr/local/lib

       

    • 重新運行一下就發現不會報錯了,此時在當前目錄下會產生一個log文件夾,里面會有一個test.log,cat一下看一下輸出:
    • 1 [INFO ][2017-03-28 16:25:19,512] : this is a test

       

    • 到這里log4cxx已經完成了初步使用,但其中還有很多細節還沒有深入研究,感興趣的可以細細研究一下。


免責聲明!

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



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