玩轉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,擷取掉左邊字元;
此章我們從三要素瞭解一下日誌的一些屬性,下章我們將來看一個日誌配置