在開發中我們需要調試主要依賴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,截取掉左邊字符;
此章我們從三要素瞭解一下日誌的一些屬性,下章我們將來看一個日誌配置