玩轉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,截取掉左邊字符;

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

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