2、log4cxx的配置和使用


一、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已經完成了初步的配置和使用。


免責聲明!

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



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