Apache Log4j 學習筆記

Log4j的類圖

  • Logger - 日誌寫出器,供程序員輸出日誌信息
  • Appender - 日誌目的地,把格式化好的日誌信息輸出到指定的地方去
    • ConsoleAppender - 目的地爲控制檯的Appender
    • FileAppender - 目的地爲文件的Appender
    • RollingFileAppender - 目的地爲大小受限的文件的Appender
  • Layout - 日誌格式化器,用來把程序員的logging request格式化成字符串
    • PatternLayout - 用指定的pattern格式化logging request的Layout

      Appender:日誌目的地

      每個logger都可以擁有一個或者多個appender,每個appender表示一個日誌的輸出目的地,比如console或者某個文件。可以使用Logger.addAppender(Appender app)爲logger增加一個appender;可以使用Logger.removeAppender(Appender app)爲logger移除一個appender。

      默認情況下,logger的additive標誌被設置爲true,表示子logger將繼承父logger的所有appenders。該選項可以被重新設置,表示子logger將不再繼承父logger的appenders。

      root logger擁有目標爲system.out的consoleAppender,故默認情況下,所有的logger都將繼承該appender。

      // Log4j APIs : class Logger
            
      // 爲logger對象增加或者移除一個Appender對象
      public void appAppender(Appender app);
      public void removeAppender(Appender app);
      
      // 獲得和設置additive標誌:是否繼承父logger的appenders
      // 注意:在設置additive標誌爲false時,必須保證已經爲該logger設置了新的appender,
      // 否則log4j將報錯:log4j:WARN No appenders could be found for logger (x.y.z).
      public boolean getAdditivity();
      public void setAdditivity(boolean additive);
              

      ConsoleAppender

      可以使用ConsoleAppender對象把日誌輸出到控制檯。每個ConsoleAppender都有一個target,表示它的輸出目的地。它可以是System.out,標準輸出設備(緩衝顯示屏);或者是System.err,標準錯誤設備(不緩衝顯示屏)。ConsoleAppender的使用方法參考如下API:

      // Log4j APIs : class ConsoleAppender extends WriterAppender
            
      // 構造方法,使用一個Layout對象構造一個ConsoleAppender對象 
      // 默認情況下,ConsoleAppender的target是System.out 
      public ConsoleAppender(Layout layout);
      
      // 構造方法,使用一個Layout對象和一個target字符串構造ConsoleAppender對象 
      // target的可能取值爲ConsoleAppender.SYSTEM_OUT和ConsoleAppender.SYSTEM_ERR 
      public ConsoleAppender(Layout layout, String target);
                

      FileAppender

      可以使用FileAppender對象把日誌輸出到一個指定的日誌文件中去。使用方法可以參考如下的API:

      // Log4j APIs : class FileAppender extends WriterAppender
            
      // 構造方法,使用一個Layout對象和日誌文件名構造一個FileAppender對象 
      public FileAppender(Layout layout, String filename)
      throws IOException;
      public FileAppender(Layout layout, String filename, boolean append)
      throws IOException;
                

      RollingFileAppender

      可以使用FileAppender的子類RollingFileAppender對象,把日誌輸出到一個指定的日誌文件中。不同的是該日誌文件的大小受到限制,當日志內容超出最大的尺寸時,該文件將向上滾動(最老的日誌被擦除)。還可以在該類對象中指定爲日誌文件做多少個備份。具體使用方法參考如下API:

      // Log4j APIs : class RollingFileAppender extends FileAppender
            
      // 構造方法,使用一個Layout對象和日誌文件名構造一個RollingFileAppender對象 
      public RollingFileAppender(Layout layout, String filename)
      throws IOException;
      public RollingFileAppender(Layout layout, String filename, boolean append)
      throws IOException;
      
      // 獲得和設置日誌備份文件的個數 
      public int getMaxBackupIndex();
      public void setMaxBackupIndex(int index);
      
      // 獲得和設置滾動日誌文件的最大尺寸 
      public long getMaximumFileSize();
      public void setMaximumFileSize(long size);
                

      Layout:日誌格式化器

      每個appender都和一個layout相聯繫;layout的任務是格式化用戶的logging request,appender的任務是把layout格式化好的輸出內容送往指定的目的地。

      PatternLayout

      PatternLayout是Layout的一個子類,用來使用類似C語言的printf函數中使用的格式控制字符串來控制日誌的輸出格式。使用方法參考如下API:

      // Log4j APIs : class PatternLayout extends Layout
            
      // 無參數構造方法,使用DEFAULT_CONVERSION_PATTERN構造一個PatternLayout 
      // 注意:DEFAULT_CONVERSION_PATTERN爲"%m%n",只打印消息信息 
      public PatternLayout();
      
      // 構造方法,使用自定義的pattern構造一個PatternLayout 
      public PatternLayout(String pattern);
      
      // 獲得和設置PatternLayout對象的日誌pattern 
      public String getConversionPattern();
      public void setConversionPattern(String pattern);
      
      
      
      
      示例:
      log4j.rootLogger=all, stdout, 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= E:/test.log
      
      
      log4j.appender.R.MaxFileSize=100KB
      # Keep one backup file
      log4j.appender.R.MaxBackupIndex=20
      
      
      log4j.appender.R.layout=org.apache.log4j.PatternLayout
      log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
      
      
      
      示例2:(指定包的log輸出)
      log4j.logger.com.ebank.kunlun=ALL,KUNLUNLog
      #log4j.additivity.com.ebank.kunlun=false
      log4j.appender.KUNLUNLog=org.apache.log4j.RollingFileAppender
      log4j.appender.KUNLUNLog.File=/cpf/SUNWappserver/domains/domain3/logs/KUNLUN/KUNLUN_test.log
      log4j.appender.KUNLUNLog.MaxFileSize=2048KB
      log4j.appender.KUNLUNLog.MaxBackupIndex=100
      log4j.appender.KUNLUNLog.layout=org.apache.log4j.PatternLayout
      log4j.appender.KUNLUNLog.layout.ConversionPattern=%n[%d{dd-MM-yyyy HH\:mm\:ss}][%t][%p] (%c\:%L) - %m%n 
      
      
      
      
      
      
      
      
      
      
      
      參考:http://heavyz.sourceforge.net/homepage/homepage_zh/comp/notes/log4j.html
            http://www.gbsou.com/2010/04/13/2450.html
      
發佈了51 篇原創文章 · 獲贊 9 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章