一、log4cxx配置文件的組成部分
1.優先級
Logger的語法:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中,level 是日志記錄的優先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定義的級別。
Log4j建議只使用四個級別,優先級從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這里定義的級別,可以控制到應用程序中相應級別的日志信息的開關。比如這里定義了INFO級別,則應用程序中所有DEBUG級別的日志信息將不被打印出來。
appenderName名字任意,用來標示日志信息輸出到哪里,可以同時指定多個。
2.輸出目的地
Appender的語法:
1 log4j.appender.appenderName = fully.qualified.name.of.appender.class 2 log4j.appender.appenderName.option1 = value1 3 … 4 log4j.appender.appenderName.option = valueN
其中,Log4j提供的appender有以下幾種:
1 org.apache.log4j.ConsoleAppender 控制台 2 org.apache.log4j.FileAppender 文件 3 org.apache.log4j.DailyRollingFileAppender 每天產生一個日志文件 4 org.apache.log4j.RollingFileAppender 文件大小到達指定尺寸的時候產生一個新的文件 5 org.apache.log4j.WriterAppender 將日志信息以流格式發送到任意指定的地方
3.輸出格式
1 log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class 2 log4j.appender.appenderName.layout.option1 = value1 3 … 4 log4j.appender.appenderName.layout.option = valueN
Log4j提供的Layout有以下幾種:
1 org.apache.log4j.HTMLLayout 以HTML表格形式布局 2 org.apache.log4j.PatternLayout 可以靈活地指定布局模式 3 org.apache.log4j.SimpleLayout 包含日志信息的級別和信息字符串 4 org.apache.log4j.TTCCLayout 包含日志產生的時間、線程、類別等等信息
Log4j采用類似C語言中的printf函數的打印格式格式化日志信息,打印參數如下:
1 %m 輸出代碼中指定的消息 2 %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL 3 %r 輸出自應用啟動到輸出該log信息耗費的毫秒數 4 %c 輸出所屬的類目,通常就是所在類的全名 5 %t 輸出產生該日志事件的線程名 6 %n 輸出一個回車換行符,Windows平台為“/r/n”,Unix平台為“/n” 7 %d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:
%d{yyy MMM dd HH:mm:ss,SSS},輸出2008年11月14日 15:16:17,890 8 %l 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。
二、配置實例
log4cxx.properties log4cxx配置文件
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
上面是一個常規配置,總共有兩個輸出對象fa和ca,分別表示輸出到文件和輸出到控制台。我又配置了三個代碼中需要的對象,分別是:
(1)rootLogger 默認對象,引用了fa和ca,即輸出到控制台和文件;
(2)file 只引用到fa,輸出到文件,但file多了一項配置log4j.additivity.file=false,這是不向默認對象(rootLogger)輸出,因此信息只能輸出到文件;
(3)console 只引用到ca,輸出到控制台,但additivity的默認值是true,也就是信息除了輸出到ca外,還會輸出到rootLogger,因此控制台會有兩次的信息輸出和一次的文件輸出。
三、使用實例
下面是一個使用log4CXX的實例main.cpp
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_console(Logger::getLogger("console"));//獲取配置文件中console對應的句柄 11 12 int main(){ 13 PropertyConfigurator::configure("./log4cxx.properties");//加載配置文件,下面會細說 14 LOG4CXX_INFO(logger_file,"This is a test"); 15 LOG4CXX_INFO(logger_console, "hello log4cxx"); 16 17 return 0; 18 }
編譯執行:
1 g++ main.cpp -o main -llog4cxx
2 ./mai
執行結果:
這是在終端顯示的內容,同時在當前目錄下會產生一個log文件夾,,里面會有一個taday.log,cat一下看一下輸出:
到這里log4cxx已經完成了初步的配置和使用。