- 簡介
http://logging.apache.org/log4cxx/index.html
- 下載、編譯、安裝
cd ~/libs
wget http://mirror.bjtu.edu.cn/apache//apr/apr-1.4.4.tar.bz2
tar xjvf apr-1.4.4.tar.bz2
cd apr-1.4.4
./configure --prefix=${HOME}/libs && make && make install
cd ..
wget http://mirror.bjtu.edu.cn/apache//apr/apr-util-1.3.11.tar.bz2
tar xjvf apr-util-1.3.11.tar.bz2
cd apr-util-1.3.11
./configure --prefix=${HOME}/libs --with-apr=${HOME}/libs && make && make install
cd ..
wget http://apache.etoak.com//logging/log4cxx/0.10.0/apache-log4cxx-0.10.0.tar.gz
tar xzvf apache-log4cxx-0.10.0.tar.gz
cd apache-log4cxx-0.10.0
./configure --with-charset=utf-8 --prefix=${HOME}/libs --with-apr=${HOME}/libs --with-apr-util=${HOME}/libs && make && make install
- 使用例子
#include?"log4cxx/logger.h"
#include?"log4cxx/propertyconfigurator.h"
static?log4cxx::LoggerPtr?logger(log4cxx::Logger::getLogger("hello"));
int?main(int?argc,?char?*argv[])
{
????????log4cxx::PropertyConfigurator::configure("./log4cxx_hello.properties");
??????? LOG4CXX_INFO(logger,?"你好,log4cxx!");
????????return?0;
}
#include?"log4cxx/propertyconfigurator.h"
static?log4cxx::LoggerPtr?logger(log4cxx::Logger::getLogger("hello"));
int?main(int?argc,?char?*argv[])
{
????????log4cxx::PropertyConfigurator::configure("./log4cxx_hello.properties");
??????? LOG4CXX_INFO(logger,?"你好,log4cxx!");
????????return?0;
}
log4cxx_hello.properties:
log4j.rootLogger=debug,?R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#?Pattern?to?output?the?caller's?file?name?and?line?number.
log4j.appender.stdout.layout.ConversionPattern=%5p?[%t]?(%F:%L)?-?%m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=./hello.log
log4j.appender.R.MaxFileSize=100KB
#?Keep?one?backup?file
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%5p?%c?[%t]?(%F:%L)?-?%m%n
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#?Pattern?to?output?the?caller's?file?name?and?line?number.
log4j.appender.stdout.layout.ConversionPattern=%5p?[%t]?(%F:%L)?-?%m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=./hello.log
log4j.appender.R.MaxFileSize=100KB
#?Keep?one?backup?file
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%5p?%c?[%t]?(%F:%L)?-?%m%n
g++ -o hello hello.cpp -I${HOME}/libs/include ${HOME}/libs/lib/liblog4cxx.a ${HOME}/libs/lib/libaprutil-1.a ${HOME}/libs/lib/libapr-1.a? -lexpat -lpthread
- 注意事項
這個限制避免性能問題,可以通過設置大一點的MaxFileSize來保存更多日志,否則就要在編譯時改大一點了。
參考:http://objectmix.com/apache/684503-urgent-log4cxx-large-window-sizes-not-allowed.html
- 使用技巧
???? xml雖較property格式繁鎖,支持的配置面更全,而property格式的配置文件使用更簡單,容易在網上找到現成的配置文件。
2,logger命名。
???? logger名稱反映了軟件模塊,如果有代表軟件模塊的類,則在類中包含以該類類名命名的logger對象,該模塊功能相關代碼通過該logger進行日志記錄。
另外可將logger對象作為全局變量,方便使用,特別是當軟件模塊較松散,并無對應的封裝類時。
3,在代碼中適當地放置日志代碼。引用適當的日志對象,對日志進行適當分級。
4,余下的工作就是修改配置文件,對日志進行控制了。
使用配置文件的好處就是可以方便地配置日志而不需要修改源代碼,可以在配置文件中方便配置日志過濾、格式、日志目的地。
- 體驗