【學習筆記】log4cxx安裝和使用

一、簡介

log4cxx是Java社區著名的log4j的c++移植版,用於爲C++程序提供日誌功能,以便開發者對目標程序進行調試和審計,log4cxx是apache軟件基金會的開源項目,基於APR實現跨平臺支持。一個良好的日誌系統不管是開發、調試和維護,對一個項目來說是多麼的重要,我想做過開發的同學深知這點。我用過的日誌框架比較少,所以在這裏不做與其它日誌框架的比較,類似的日誌框架還有GLog、boost log,如果有興趣可以去研究一下。
其實剛工作時,9c的pass9項目中就需要日誌系統,只是那時候還不知道log4cxx這個好東西,只能自己動手實現了一個簡單,主要是用到了c函數的可變參數,值得注意的是線程安全的問題,所以在寫文件時要加互斥鎖,爲了提高性能,還需注意文件塊大小問題,當然了,功能特別簡單,只有控制檯和文件輸出,有等級、時間、線程號、文件名、行號、函數名這些輸出。

二、下載與安裝

環境:linux
依賴:apr、apr-util
apr、apr-util下載地址:http://apr.apache.org/download.cgi

安裝步驟:
1.由於log4cxx是依賴於apr的,因此先安裝apr和apr-util這兩個庫,我會將這兩個庫安裝到同一個目錄下;
下載完之後,當前目錄有apr-1.4.6.tar.gzapr-util-1.5.1.tar.gz兩個文件。
$>tar xvf apr-1.4.6.tar.gz
$>cd apr-1.4.6
$>./configuer --prefix=/usr/local/apr
$>make
$>make install


目前apr安裝完成,會在/usr/local下產生apr目錄
$>tar xvf apr-util-1.5.1.tar.gz
$>cd apr-util-1.5.1
$>./configuer --prefix=/usr/local/apr --with-apr=/usr/local/apr
$>make
$>make install


apr-util也會安裝/usr/local/apr目錄下

2.開始安裝log4cxx,下載完之後,當前目錄下有apache-log4cxx-0.10.0.tar.gz
$>tar xvf apache-log4cxx-0.10.0.tar.gz
$>cd apache-log4cxx-0.10.0
$>./configuer --prefix=/usr/local/log4cxx --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr  --with-charset=utf-8 --with-logchar=utf-8
$>make


注意:由於我用的是ubuntu系統,默認編碼是utf-8,因此必須要加上 --with-charset=utf-8 --with-logchar=utf-8,不然中文輸出是一堆亂碼。

這時候會出現這樣的錯誤
inputstreamreader.cpp:66: error: 'memmove' was not declared in this scope
make[3]: *** [inputstreamreader.lo] 錯誤 1

在網上找了相關資料,原來有幾個.cpp文件缺少了一些引用頭文件,添加上去即可。
src/main/cpp/inputstreamreader.cpp添加#include <string.h>
src/main/cpp/socketoutputstream.cpp添加#include <string.h>
src/examples/cpp/console.cpp添加#include <string.h>;#include <stdio.h>;

這些文件修改完之後,執行make和make install就可安裝成功。

三、測試

主函數代碼:main.cpp
#include <log4cxx/logger.h>
#include <log4cxx/basicconfigurator.h>
#include <log4cxx/propertyconfigurator.h>
#include <log4cxx/helpers/exception.h>
#include <iostream>
int main()
{
log4cxx::PropertyConfigurator::configureAndWatch("log4cxx.properties");
log4cxx::LoggerPtr logger(log4cxx::Logger::getLogger("lib"));
LOG4_DEBUG(logger, "this is log4cxx test");
return 0;
}

配置文件:log4cxx.properties
# 設置root logger爲DEBUG級別,使用了ca和fa兩個Appender
log4j.rootLogger=DEBUG,lib

#對Appender lib進行設置:
# 這是一個文件類型的Appender,
# 其輸出文件(File)爲./lib.log,
# 輸出方式(Append)爲覆蓋方式,
# 輸出格式(layout)爲PatternLayout
log4j.appender.lib=org.apache.log4j.ConsoleAppender
log4j.appender.lib.Threshold=DEBUG
#log4j.appender.lib.DatePattern='log/'yyyy-MM-dd'_SysService.log'
log4j.appender.lib.File=./log/output.log
log4j.appender.lib.Append=true
log4j.appender.lib.layout=org.apache.log4j.PatternLayout
log4j.appender.lib.layout.ConversionPattern=[%-5p] %d %l : %m%n
$>g++ -o test -I/usr/local/apr/include -L/usr/local/apr/lib -lapr-1 -laprutil-1 main.cpp
$./test

會在屏幕中打印出
[DEBUG] 2012年11月14日 15:16:17,890 main.cpp(10) : test
先寫到這裏,下篇將會介紹log4cxx的配置。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章