1. 程式人生 > >Log4j日誌框架

Log4j日誌框架

指定格式 orf 換行 you fatal package [] 優先級 pac

引入依賴

  在maven遠程倉庫引入依賴

  技術分享

<dependencies>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>    

配置文件

  在 src/main/resources 目錄下新建配置文件,命名為 log4j.properties

  首先介紹一下layout日誌信息格式中的常用設置——PatternLayout

  org.apache.log4j.PatternLayout(可以靈活地指定輸出的日誌信息格式),有個ConversionPattern屬性,靈活配置輸出屬性:
    %m 輸出代碼中指定的消息;
    %M 輸出打印該條日誌的方法名;
    %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL;
    %r 輸出自應用啟動到輸出該log信息耗費的毫秒數;
    %c 輸出所屬的類目,通常就是所在類的全名;
    %t 輸出產生該日誌事件的線程名;
    %n 輸出一個回車換行符,Windows平臺為"rn”,Unix平臺為"n”;


    %d 輸出日誌時間點的日期或時間,默認格式為ISO8601,也可以在其後指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},輸出類似:2002-10-18 22:10:28,921;
    %l 輸出日誌事件的發生位置,及在代碼中的行數;

  配置文件有多種設置方式,下面介紹幾種常用的:

輸出到控制臺和每日日誌

  假如日誌數據量不是很大,我們可以用DailyRollingFileAppender 每天產生一個日誌,方便查看;

log4j.rootLogger=DEBUG, Console ,DailyRollingFile
   
#Console  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.layout=org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
    
#DailyRollingFile
log4j.appender.DailyRollingFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.DailyRollingFile.File = C://log3.log
log4j.appender.DailyRollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.DailyRollingFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n

輸出到控制臺和固定尺寸的日誌文件

  假如日誌數據量很大,我們一般用RollingFileAppender,固定尺寸的日誌,假如超過了就產生一個新的文件;

  MaxFileSize 是日誌文件的最大尺寸;根據實際需求來定 10KB 100KB也行

  MaxBackupIndex是日誌文件的個數,假如超過了,則覆蓋,主要考慮到的是硬盤的容量問題;根據實際需求來定 比如 100 500;

log4j.rootLogger=DEBUG, Console ,RollingFile
   
#Console  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.layout=org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

#RollingFile
log4j.appender.RollingFile = org.apache.log4j.RollingFileAppender
log4j.appender.RollingFile.File = C://log4.log
log4j.appender.RollingFile.MaxFileSize=100KB
log4j.appender.RollingFile.MaxBackupIndex=10
log4j.appender.RollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n

輸出時報錯ERROR日誌單獨存到指定文件

  有時候我們需要把一些報錯ERROR日誌單獨存到指定文件,這時候需要使用Threshold屬性;

  Threshold屬性可以指定日誌level

  Log4j根據日誌信息的重要程度,分OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL

  比如我們指定某個appender的Threshold為WARN,那這個appender輸出的日誌信息就是WARN級別以及WARN以上的級別;

  假如我們指定的是ERROR,那這個就輸出ERROR或者FATAL日誌信息;

  當然這裏有個提前rootLogger裏配置的level比如小於Threshold層級,否則無效,還是按照總的rootLogger裏的level來輸出,一般我們實際實用的話 rootLogger裏配置DEBUG,然後某個文件專門存儲ERROR日誌,就配置下Threshold為ERROR。

log4j.rootLogger=DEBUG, Console ,DFile ,EFILE

#Console  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.layout=org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

#DEBUGFile
log4j.appender.DFile = org.apache.log4j.FileAppender
log4j.appender.DFile.File = C://DEBUG.log
log4j.appender.DFile.layout = org.apache.log4j.PatternLayout
log4j.appender.DFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
log4j.appender.DFile.Threshold = DEBUG
log4j.appender.DFile.Append = true

#ERRORFile
log4j.appender.EFILE = org.apache.log4j.FileAppender
log4j.appender.EFILE.File = C://ERROR.log
log4j.appender.EFILE.layout = org.apache.log4j.PatternLayout
log4j.appender.EFILE.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
log4j.appender.EFILE.Threshold = ERROR

實例代碼

package cn.cslg.log;

import org.apache.log4j.Logger;

public class Test {

    private static Logger logger=Logger.getLogger(Test.class); // 獲取logger實例
    
    public static void main(String[] args) {
    
        logger.info("普通Info信息");
        logger.debug("調試debug信息");
        logger.error("報錯error信息");
        logger.warn("警告warn信息");
        logger.fatal("嚴重錯誤fatal信息");
        
        logger.error("報錯信息", new IllegalArgumentException("非法參數"));
        
    }
}

Log4j日誌框架