log4j實現日志記錄(搬運)


日志是應用軟件中不可缺少的部分,Apache的開源項目Log4j是一個功能強大的日志組件,提供方便的日志記錄,具體請參考Log4j文檔指南。

Log4j下載
在apache網站,可以免費下載到Log4j最新版本的軟件包

Apache log4j  (推薦)

Apache log4j 2

Log4j的包下載完成后,解壓,將其中打包好的的log4j-1.x.x.jar導入你的工程LIB中。

 

Log4j配置

 

Log4J的配置文件(Configuration File)就是用來設置記錄器的級別、存放器和布局的,它可接key=value格式的設置或xml格式的設置信息。通過配置,可以創建出Log4J的運行環境。

1. 配置文件
Log4J配置文件的基本格式如下:

#配置根Logger
log4j.rootLogger  =    [ level  ]   ,  appenderName1 ,  appenderName2 ,  …

#配置日志信息輸出目的地Appender
log4j.appender.appenderName  =  fully.qualified.name.of.appender.class 
  log4j.appender.appenderName.option1  =  value1 
  … 
  log4j.appender.appenderName.optionN  =  valueN 

#配置日志信息的格式(布局)
log4j.appender.appenderName.layout  =  fully.qualified.name.of.layout.class 
  log4j.appender.appenderName.layout.option1  =  value1 
  … 
  log4j.appender.appenderName.layout.optionN  =  valueN 


其中 [level] 是日志輸出級別,共有5級:

FATAL       0  
ERROR      3  
WARN       4  
INFO         6  
DEBUG      7 


Appender 為日志輸出目的地,Log4j提供的appender有以下幾種:

org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件),
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),
org.apache.log4j.WriterAppender(將日志信息以流格式發送到任意指定的地方)


Layout:日志輸出格式,Log4j提供的layout有以下幾種:

org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息)


打印參數: Log4J采用類似C語言中的printf函數的打印格式格式化日志信息,如下:

    %m   輸出代碼中指定的消息
  %p   輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL 
  %r   輸出自應用啟動到輸出該log信息耗費的毫秒數 
  %c   輸出所屬的類目,通常就是所在類的全名 
  %t   輸出產生該日志事件的線程名 
  %n   輸出一個回車換行符,Windows平台為“\r\n”,Unix平台為“\n” 
  %d   輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},輸出類似:2002年10月18日  22 : 10 : 28 , 921  
  %l   輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java: 10 ) 


2. 在代碼中初始化Logger: 
1)在程序中調用BasicConfigurator.configure()方法:給根記錄器增加一個ConsoleAppender,輸出格式通過PatternLayout設為"%-4r [%t] %-5p %c %x - %m%n",還有根記錄器的默認級別是Level.DEBUG. 
2)配置放在文件里,通過命令行參數傳遞文件名字,通過PropertyConfigurator.configure(args[x])解析並配置;
3)配置放在文件里,通過環境變量傳遞文件名等信息,利用log4j默認的初始化過程解析並配置;
4)配置放在文件里,通過應用服務器配置傳遞文件名等信息,利用一個特殊的servlet來完成配置。

 

 

Log4j示例

新建Java工程,代碼

 

[java]  view plain  copy
 
 print?
  1. package com.homer;  
  2.   
  3. import org.apache.log4j.BasicConfigurator;  
  4. import org.apache.log4j.Logger;  
  5. import org.apache.log4j.PropertyConfigurator;  
  6. import org.apache.log4j.xml.DOMConfigurator;  
  7.   
  8.   
  9. public class HMain {  
  10.     static Logger log4j = Logger.getLogger(HMain.class.getClass());  
  11.       
  12.     public HMain(){  
  13.         System.out.println("hello, I am HMain");  
  14.           
  15.         printLog();  
  16.     }  
  17.       
  18.     private void printLog(){  
  19.         BasicConfigurator.configure();  
  20.         PropertyConfigurator.configure("/home/homer/workspace/myLog4j/WebContent/WEB-INF/log4j.properties");  
  21.           
  22.         DOMConfigurator.configure("");  
  23.           
  24.         log4j.debug("log4j debug");  
  25.         log4j.info("log4j info");  
  26.         log4j.warn("log4j warn");  
  27.         log4j.error("log4j error");  
  28.         log4j.fatal("log4j fatal");  
  29.     }  
  30. }  


Log4j 配置文件(log4j.properties)

 

 

[html]  view plain  copy
 
 print?
  1. ### set log levels ###  
  2. log4j.rootLogger = debug ,  stdout ,  D ,  E  
  3.   
  4. ### 輸出到控制台 ###  
  5. log4j.appender.stdout = org.apache.log4j.ConsoleAppender  
  6. log4j.appender.stdout.Target = System.out  
  7. log4j.appender.stdout.layout = org.apache.log4j.PatternLayout  
  8. log4j.appender.stdout.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n  
  9.   
  10. ### 輸出到日志文件 ###  
  11. log4j.appender.D = org.apache.log4j.DailyRollingFileAppender  
  12. log4j.appender.D.File = logs/log.log  
  13. log4j.appender.D.Append = true  
  14. log4j.appender.D.Threshold = DEBUG ## 輸出DEBUG級別以上的日志  
  15. log4j.appender.D.layout = org.apache.log4j.PatternLayout  
  16. log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n  
  17.   
  18. ### 保存異常信息到單獨文件 ###  
  19. log4j.appender.E = org.apache.log4j.DailyRollingFileAppender  
  20. log4j.appender.E.File = /logs/error.log ## 異常日志文件名  
  21. log4j.appender.E.Append = true  
  22. log4j.appender.E.Threshold = ERROR ## 只輸出ERROR級別以上的日志!!!  
  23. log4j.appender.E.layout = org.apache.log4j.PatternLayout  
  24. log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %l:%c:%t:%r ] - [ %p ]  %m%n  

 

 

運行結果(/home/homer/logs目錄下)

控制台(console)

15:56:12,718 DEBUG java.lang.Class:24 - log4j debug
15:56:12,722  INFO java.lang.Class:25 - log4j info
15:56:12,723  WARN java.lang.Class:26 - log4j warn
15:56:12,723 ERROR java.lang.Class:27 - log4j error
15:56:12,723 FATAL java.lang.Class:28 - log4j fatal

 

error.log

2012-09-20 15:56:12  [ com.homer.HMain.printLog(HMain.java:24):java.lang.Class:http-bio-9980-exec-3:0 ] - [ DEBUG ]  log4j debug
2012-09-20 15:56:12  [ com.homer.HMain.printLog(HMain.java:25):java.lang.Class:http-bio-9980-exec-3:4 ] - [ INFO ]  log4j info
2012-09-20 15:56:12  [ com.homer.HMain.printLog(HMain.java:26):java.lang.Class:http-bio-9980-exec-3:5 ] - [ WARN ]  log4j warn
2012-09-20 15:56:12  [ com.homer.HMain.printLog(HMain.java:27):java.lang.Class:http-bio-9980-exec-3:5 ] - [ ERROR ]  log4j error
2012-09-20 15:56:12  [ com.homer.HMain.printLog(HMain.java:28):java.lang.Class:http-bio-9980-exec-3:5 ] - [ FATAL ]  log4j fatal

 

log.log

2012-09-20 15:56:12  [ http-bio-9980-exec-3:0 ] - [ DEBUG ]  log4j debug
2012-09-20 15:56:12  [ http-bio-9980-exec-3:4 ] - [ INFO ]  log4j info
2012-09-20 15:56:12  [ http-bio-9980-exec-3:5 ] - [ WARN ]  log4j warn
2012-09-20 15:56:12  [ http-bio-9980-exec-3:5 ] - [ ERROR ]  log4j error
2012-09-20 15:56:12  [ http-bio-9980-exec-3:5 ] - [ FATAL ]  log4j fatal

 

 

 

 


參考推薦:

log4j日志配置

log4j.properties配置詳解

Apache logging services

 


免責聲明!

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



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