1. 程式人生 > >玩轉log配置一:log4j.properties詳情

玩轉log配置一:log4j.properties詳情

        在開發中我們需要除錯主要依賴debug模式,但是在尋找bug問題的時候更多是依賴於log,一個強大的log配置將會給我們帶來更多便捷,所以說在一個系統中配置一個log檔案是必要的,今天我們瞭解一下Log4j.properties的引數。後面我們將結合各種框架,以及各種需要配置屬於自己的,具有特色的日誌;

定義日誌配置:就是對Logger,Appender及Layout的分別使用。Log4j支援兩種配置檔案格式:一種是XML格式檔案,一種是java properties(key=value)格式檔案:今天我們先來看properties格式:

根據不同的日誌系統,我們先了解一下那些規則配置才會被正確載入

Logback: logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Log4j: log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
Log4j2: log4j2-spring.xml, log4j2.xml
JDK (Java Util Logging): logging.properties

 先來看一個最簡單的日誌配置:
log4j.rootLogger = debug,stdout
### 輸出資訊到控制擡 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

由上面我們可以看到配置日誌有三個重要組成:接下來我們將走進log4j:

一、Log4j使用:

日誌三要素:

    1、日誌資訊的優先順序

    2、日誌資訊的輸出目的地

    3、日誌資訊輸出格式

1>、配置根Logger (日誌資訊的優先順序)

    log4j.rootLogger=[ level ] , appenderName1,appenderName2 , ...

    level:是日誌記錄的優先順序,分為OFF, FATAL, ERROE, WARN, INFO, DEBUG, ALL以及自定義的日誌;通過控制輸出級別,可以控制應用程式中相應級別的日誌資訊開關。

    A: off 最高等級,用於關閉所有日誌記錄。

    B: fatal 指出每個嚴重的錯誤事件,將會導致應用程式的退出。

    C: error 指出雖然發生錯誤事件,但任然不影響系統的繼續執行。

    D: warn 表明會出現潛在的錯誤情形。

    E: info 一般和在粗顆粒度級別上,強調應用程式的執行全程。

    F: debug 一般用於細顆粒級別上,對除錯應用程式非常有幫助。

    G: all 最低等級,用於開啟所有日誌記錄。

       這些級別是定義在org.apache.log4j.Level類中:log4j只建議使用4個級別,分別是:error warn info debug; 

    appenderName:日誌輸出地方,可以指定多個輸出目標;

2>、日誌資訊輸出目的地

    log4j.appender.appenderName=class

        class可以使用下面五個目的地中任意一個:

        A. org.apache.log4j.ConsoleAppender #控制檯

        B. org.apache.log4j.FileAppender #檔案

        C. org.apache.log4j.DailyRollingFileAppender #每天產生一個日誌檔案

        D. org.apache.log4j.RollingFileAppender #檔案大小到達指定尺寸的時候產生一個新的檔案

        E. org.apache.log4j.WriterAppender #將日誌資訊以流格式傳送到指定的地方

接下來我們分別來理解一下這五個目的選項:

A. ConsoleAppender 

    Threshold =warn指定日誌訊息的輸出最低層次。

    ImmediateFlush=true 預設值是true,所有訊息會被立即輸出。

    Target=System.err 預設是System.out 指定輸出控制檯

B. FileAppender

    Threshold=WARN:指定日誌訊息的輸出最低層次。
    ImmediateFlush=true:預設值是true,意謂著所有的訊息都會被立即輸出。
    File=mylog.txt:指定訊息輸出到mylog.txt檔案。

    Append=false:預設值是true,即將訊息增加到指定檔案中,false指將訊息覆蓋指定的檔案內容。         

C. DailyRollingFileAppender 

    Threshold=WARN:指定日誌訊息的輸出最低層次。

     ImmediateFlush=true:預設值是true,意謂著所有的訊息都會被立即輸出。

     File=mylog.txt:指定訊息輸出到mylog.txt檔案。

     Append=false:預設值是true,即將訊息增加到指定檔案中,false指將訊息覆蓋指定的檔案內容。

    DatePattern=''.''yyyy-ww:每週滾動一次檔案,即每週產生一個新的檔案。當然也可以指定按月、周、天、時和分。即對應的格式如下:

        1)''.''yyyy-MM: 每月

        2)''.''yyyy-ww: 每週 

        3)''.''yyyy-MM-dd: 每天

        4)''.''yyyy-MM-dd-a: 每天兩次

        5)''.''yyyy-MM-dd-HH: 每小時

        6)''.''yyyy-MM-dd-HH-mm: 每分鐘

D. RollingFileAppender 

    Threshold=WARN:指定日誌訊息的輸出最低層次。

    ImmediateFlush=true:預設值是true,意謂著所有的訊息都會被立即輸出。

    File=mylog.txt:指定訊息輸出到mylog.txt檔案。

    Append=false:預設值是true,即將訊息增加到指定檔案中,false指將訊息覆蓋指定的檔案內容。

    MaxFileSize=100KB: 字尾可以是KB, MB 或者是 GB. 在日誌檔案到達該大小時,將會自動滾動,即將原來的內容移到mylog.log.1檔案。

    MaxBackupIndex=2:指定可以產生的滾動檔案的最大數。

3>、日誌資訊的格式:

    1. log4j.appender.appenderName.layout = class

    class:

    org.apache.log4j.HTMLLayout #以HTML表格形式佈局

    org.apache.log4j.PatternLayout #靈活指定佈局模式

    org.apache.log4j.SimpleLayout #日誌資訊的級別和資訊字串

    org.apache.log4j.TTCCLayout #包含日誌產生時間,執行緒,類別等資訊

        1)、HTMLLayout

            LocationInfo=true;預設值是false,輸出java檔名稱和行號;

            Title =my app file;預設值是Log4J Log Messages;

        2)、PatternLayout

            ConversionPattern = %m%n 怎樣格式化指定的訊息

        3)、XMLLayout 

            LocationInfo=true 預設false,輸出java檔案和行號

說明:log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n

-x號:x資訊輸出時左對齊;

%p: 輸出日誌資訊優先順序,即debug info warn error fatal

%d: 輸出日誌時間點的日期或者時間,預設格式為ISO8601,也可以指定格式:%d{yyy MMM dd HH:mm:ss,SSS} 輸出為:2018年4月24日 12:49:40 ,921

%r: 輸出自應用啟動到輸出該log資訊耗費的毫秒數

%c: 輸出日誌資訊所屬的類目,所在類的全名

%t: 輸出改日誌事件的執行緒名

%l: 輸出日誌事件發生位置,等價%C.%M(%F:%L)包含類目名,執行緒,以及程式碼中行數,eg:Test.Log4j.main(TestLog4j.java:10)

%x: 輸出和當前執行緒相關的NDC(巢狀診斷環境),

%%:輸出一個%字元

%F: 輸出日誌訊息產生時所在檔名稱

%L: 輸出程式碼中行號

%m: 輸出程式碼中指定的訊息,產生的日誌的具體訊息

%n: 輸出一個回車換行符,

在%與模式字元間加修飾符來控制其最小寬度,最大寬度,和文字的對齊方式

    %20c:指定輸出名稱,最小寬度20,若小於20,預設右對齊

    %-20c:指定輸出名稱最小寬度30,若小於20,預設左對齊

    %.30c:指定最大寬度30,若大於,擷取掉左邊多出字元;小於不會有空格

    %20.30c:若小於20用空格補,且右對齊,若大於30,擷取掉左邊字元;

此章我們從三要素瞭解一下日誌的一些屬性,下章我們將來看一個日誌配置