log4j 配置和使用

 log4j有三個主要的組件,分別是:

    *Logger(記錄器):負責按照設定的優先級過濾日誌信息,然後轉發到存放器
    *Appender(存放器):負責接收並處理記錄器轉發來的日誌信息,通常的處理是輸出到屏幕或者存儲到磁盤文件

    *Layout(佈局器):負責格式化日誌信息

上述三者之間的關係:
    一個Logger可以掛接多個Appender(日誌信息同時轉發到多個設備)
    一個Appender指定一個Layout進行格式化操作

一、定義配置文件log4j.properties
   1.
      log4j.記錄器名稱=[ 級別 ] , 存放器名稱1, 存放器名稱2, …
      級別優先級由高到低依次是:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
      log4j建議只使用四個級別,優先級從高到低分別是:ERROR、WARN、INFO、DEBUG
      只有優先級高於或等於設定級別的日誌信息被轉發,例如,如果定義爲INFO,那麼在程序中級別爲DEBUG的日誌信息都不會輸出。
      log4j.rootLogger是所有記錄器的父對象(原名rootCategory已廢棄),可用於設定所有記錄器的缺省優先級
      記錄器可以繼承,如:log4j.myLogger.childLogger=,file
      記錄器按名字獲得,第一次訪問時自動創建(總是存在)

      如果約定每個類都只向其同名記錄器輸出日誌,則在配置文件中可以針對每一個特定類進行日誌配置

 2.
      log4j.appender.存放器名稱=存放器類名
      目前,log4j實現的存放器類有以下幾種:
          org.apache.log4j.ConsoleAppender(控制檯)
          org.apache.log4j.FileAppender(文件)
          org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件)
          org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
          org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)
   3.
      log4j.appender.存放器名稱.layout=佈局器類名
      目前,log4j實現的佈局器類有以下幾種:
          org.apache.log4j.PatternLayout(log4j的標準佈局器,可以靈活地指定佈局模式)
          org.apache.log4j.HTMLLayout(以HTML表格形式佈局)
          org.apache.log4j.SimpleLayout(包含級別和日誌信息的簡單字符串)
          org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)
   4.
      設定佈局器選項(主要是設定轉換格式)
          log4j.appender.存放器名稱.layout.選項名=值

      通常採用log4j的標準佈局器:
          log4j.appender.存放器名稱.layout=org.apache.log4j.PatternLayout
          log4j.appender.存放器名稱.layout.ConversionPattern=格式化參數

      log4j採用類似C語言中printf函數的格式化參數格式化日誌信息,參數如下:
          %m 輸出代碼中指定的信息
          %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL
          %r 輸出自佈局器構造到該時間點所經過的毫秒數
          %c 輸出所屬的類目,通常就是所在類的全名
          %t 輸出產生該日誌事件的線程名
          %n 輸出一個回車換行符,Windows平臺爲“/r/n”,Unix平臺爲“/n”
          %d 輸出該時間點的日期或時間,默認格式爲ISO8601,也可以在其後指定格式。如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類

似:08 十二月 03 12:04:52,531
          %l 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。如:Testlog4.main(TestLog4.java:10)
          %F 輸出文件名
          %L 輸出行號

二、在代碼中調用log4j
   1.將log4j的jar包(log4j-1.2.15.jar)導入到工程中。
   2.寫配置文件log4j.properties,放在src目錄下,系統運行時自動拷貝到bin目錄下。

1.<span style="font-family: courier new,courier;" >    
   2. import  org.apache.log4j.Logger;  
   3.    ...  
   4.private  static  final  Logger log = Logger.getLogger(類名.class );  
   5. ...  
   6. log.debug( Object message );  
   7. log.info( Object message );  
   8. log.warn( Object message );  
   9. log.error( Object message );  
  10.     
  11.</span>  
  import org.apache.log4j.Logger;
  ...
  private static final Logger log = Logger.getLogger(類名.class);
  ...
  log.debug( Object message );
  log.info( Object message );
  log.warn( Object message );
  log.error( Object message );

三、log4j.properties的例子

  1.< span  style ="font-family: courier new,courier;" >   
   2.# Set root logger priority to INFO and its only appender to CONSOLE.  
   3.log4j.rootLogger =INFO , CONSOLE  
   4.log4j.rootLogger =INFO , CONSOLE, LOGFILE  
   5.  
   6.# Set the enterprise logger category to FATAL and its only appender to CONSOLE.  
   7.log4j.logger.org.apache.axis.enterprise =FATAL , CONSOLE  
   8.    
   9.# CONSOLE is set to be a ConsoleAppender using a PatternLayout.  
  10.log4j.appender.CONSOLE =org .apache.log4j.ConsoleAppender  
  11.log4j.appender.CONSOLE.Threshold =INFO   
  12.log4j.appender.CONSOLE.layout =org .apache.log4j.PatternLayout  
  13.      
  14.# Pattern to output the caller's file name and line number.  
  15.log4j.appender.CONSOLE.layout.ConversionPattern =%5p [%t] (%F:%L) - %m%n  
  16.
  17.# LOGFILE is set to be a File appender using a PatternLayout.  
  18.log4j.appender.LOGFILE =org .apache.log4j.FileAppender  
  19.log4j.appender.LOGFILE.File =axis .log  
  20.log4j.appender.LOGFILE.Append =true   
  21.log4j.appender.LOGFILE.Threshold =INFO   
  22.log4j.appender.LOGFILE.layout =org .apache.log4j.PatternLayout  
  23.log4j.appender.LOGFILE.layout.ConversionPattern =%-4r [%t] %-5p %c %x - %m%n  
  24.</ span >


# Set root logger priority to INFO and its only appender to CONSOLE.
log4j.rootLogger=INFO, CONSOLE
log4j.rootLogger=INFO, CONSOLE, LOGFILE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.CONSOLE.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.Threshold=INFO
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
四、常見故障
log4j:WARN Please initialize the log4j system properly.
解決辦法:
【eclipse環境】將文件log4j.properties拷貝到src目錄下,運行時會自動拷貝到bin目錄下。之前可能需要Refresh。 


示例:

log4j.rootLogger=INFO, cons, MyAppender
log4j.appender.syslog.encoding=UTF-8
log4j.appender.cons=org.apache.log4j.ConsoleAppender
log4j.appender.cons.layout=org.apache.log4j.SimpleLayout
#日誌記錄器
log4j.appender.MyAppender=org.apache.log4j.RollingFileAppender
log4j.appender.MyAppender.File=/system.log
#log4j.appender.MyAppender.encoding=UTF-8
log4j.appender.MyAppender.MaxFileSize = 2048KB
log4j.appender.MyAppender.MaxBackupIndex = 20
log4j.appender.MyAppender.layout=org.apache.log4j.PatternLayout
#log4j.appender.MyAppender.layout.ConversionPattern=%d (%F:%L) %-5p --> %m%n
log4j.appender.MyAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %t %c - %m%n

#信息記錄器
log4j.additivity.MsgLogger = false
log4j.logger.MsgLogger=INFO, MsgAppender
log4j.appender.MsgAppender=org.apache.log4j.RollingFileAppender
#log4j.appender.MsgAppender.encoding=UTF-8
log4j.appender.MsgAppender.File=/msg.log
log4j.appender.MsgAppender.MaxFileSize = 2048KB
log4j.appender.MsgAppender.MaxBackupIndex = 20
log4j.appender.MsgAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.MsgAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n

#數值記錄器
log4j.additivity.CollectValueLogger = false
log4j.logger.CollectValueLogger=INFO, CollectValueAppender
log4j.appender.CollectValueAppender=org.apache.log4j.RollingFileAppender
#log4j.appender.CollectValueAppender.encoding=UTF-8
log4j.appender.CollectValueAppender.File=/value.log
log4j.appender.CollectValueAppender.MaxFileSize = 20480KB
log4j.appender.CollectValueAppender.MaxBackupIndex = 20
log4j.appender.CollectValueAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.CollectValueAppender.layout.ConversionPattern=%m%n


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