本文內容參考:http://blog.csdn.net/edward0830ly/article/details/8250412。 固然還有不少不是。apache
日誌記錄器(Logger)是日誌處理的核心組件,在log4j中有6種正常的日誌級別,2種特殊的日誌級別。 在org.apache.log4j.Level類中日誌定義級別源碼以下:多線程
public static final Level OFF = new Level(2147483647, "OFF", 0); public static final Level FATAL = new Level('썐', "FATAL", 0); public static final Level ERROR = new Level('鱀', "ERROR", 3); public static final Level WARN = new Level(30000, "WARN", 4); public static final Level INFO = new Level(20000, "INFO", 6); public static final Level DEBUG = new Level(10000, "DEBUG", 7); public static final Level TRACE = new Level(5000, "TRACE", 7); public static final Level ALL = new Level(-2147483648, "ALL", 7);
org.apache.log4j.Level類提供如下級別,但也能夠經過Level類的子類自定義級別。app
Level | 描述 |
---|---|
ALL | 各級包括自定義級別 |
TRACE | 指定細粒度比DEBUG更低的信息事件 |
DEBUG | 指定細粒度信息事件是最有用的應用程序調試 |
INFO | 指定可以突出在粗粒度級別的應用程序運行狀況的信息的消息 |
WARN | 指定具備潛在危害的狀況 |
ERROR | 錯誤事件可能仍然容許應用程序繼續運行 |
FATAL | 指定很是嚴重的錯誤事件,這可能致使應用程序停止 |
OFF | 這是最高等級,爲了關閉日誌記錄 |
###配置日誌信息輸出目的地佈局
log4j.appender.appenderName = fully.qualified.name.of.appender.class 1.org.apache.log4j.ConsoleAppender(控制檯) 2.org.apache.log4j.FileAppender(文件) 3.org.apache.log4j.DailyRollingFileAppender(天天產生一個日誌文件) 4.org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件) 5.org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)
解析:在上面的例子中有一個log4j.appender.appenderName;這裏的appenderName表明在log4j.priperties文件最開始的地方,定義的名字,例如:.net
log4j.rootCategory=INFO,stdout,R
appenderName能夠爲INFO、stdout、R。 fully.qualified.name.of.appender.class表明的是,案例中1到5的對象。線程
###配置日誌信息的格式debug
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class 1.org.apache.log4j.HTMLLayout(以HTML表格形式佈局), 2.org.apache.log4j.PatternLayout(能夠靈活地指定佈局模式), 3.org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串), 4.org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)
同理,appenderName表明的含義如上一章節所述。fully.qualified.name.of.layout.class含義同樣。調試
###控制檯日誌配置日誌
咱們首先須要定義appenderName爲org.apache.log4j.ConsoleAppender,在給這個appenderName賦予各類條件。以下:code
log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Threshold=info log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c{1}.%M(%l)
若是看了前文,咱們能夠知道這是一個輸出在控制檯日誌配置,那麼下面的信息是幹什麼用的呢?咱們慢慢來說。
log4j.rootCategory=INFO,stdout,R
中也設置了日誌最低級別,日誌首先會按rootCategory中定義來,再按Threshold定義。也就是說,若是在rootCategory中定義爲info,咱們在Threshold定義debug也不會輸出debug日誌。 2.log4j.appender.stdout.Target = System.out,默認狀況,指定輸出控制檯。還有System.err,輸出的效果就是報錯的感受了。###文件日誌配置 同樣的咱們須要定義一個appenderName爲文件輸出格式,可是文件輸出格式在上文中提到有三種,咱們本身按需求選擇一個格式保存日誌就能夠了,下面來詳細介紹一下。
####RollingFileAppender 指定一個大小,產生新文件。
log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=test.log log4j.appender.R.MaxFileSize=10000KB log4j.appender.R.Threshold = DEBUG # Keep one backup file log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c{1}.%M(%L) | %m%n
上面的代碼中能夠咱們來慢慢看:
####DailyRollingFileAppender 天天產生一個新文件。
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = log.log log4j.appender.D.Append = true log4j.appender.D.Threshold = DEBUG ## 輸出DEBUG級別以上的日誌 log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
上面代碼中出現了一個新東西,log4j.appender.D.Append = true。
1.log4j.appender.D.Append = true,默認值是true,即將消息增長到指定文件中,false指將消息覆蓋指定的文件內容。
####FileAppender 只有一個日誌文件
log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=file.log log4j.appender.FILE.Append=false log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
###屬性說明彙總
控制檯 Threshold=DEBUG:指定日誌消息的輸出最低層次。 ImmediateFlush=true:默認值是true,意謂着全部的消息都會被當即輸出。 Target=System.err:默認狀況下是:System.out,指定輸出控制檯 FileAppender 選項 Threshold=DEBUF:指定日誌消息的輸出最低層次。 ImmediateFlush=true:默認值是true,意謂着全部的消息都會被當即輸出。 File=mylog.txt:指定消息輸出到mylog.txt文件。 Append=false:默認值是true,即將消息增長到指定文件中,false指將消息覆蓋指定的文件內容。 RollingFileAppender 選項 Threshold=DEBUG:指定日誌消息的輸出最低層次。 ImmediateFlush=true:默認值是true,意謂着全部的消息都會被當即輸出。 File=mylog.txt:指定消息輸出到mylog.txt文件。 Append=false:默認值是true,即將消息增長到指定文件中,false指將消息覆蓋指定的文件內容。 MaxFileSize=100KB: 後綴能夠是KB, MB 或者是 GB. 在日誌文件到達該大小時,將會自動滾動,即將原來 的內容移到mylog.log.1文件。 MaxBackupIndex=2:指定能夠產生的滾動文件的最大數。 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},輸出相似:2002年10月18日 22:10:28,921 %r: 輸出自應用啓動到輸出該log信息耗費的毫秒數 %c: 輸出日誌信息所屬的類目,一般就是所在類的全名 %t: 輸出產生該日誌事件的線程名 %l: 輸出日誌事件的發生位置,至關於%C.%M(%F:%L)的組合,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main (TestLog4.Java:10) %x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤爲用到像Java servlets這樣的多客戶多線程的應用中。 %%: 輸出一個"%"字符 %F: 輸出日誌消息產生時所在的文件名稱 %L: 輸出代碼中的行號 %m: 輸出代碼中指定的消息,產生的日誌具體信息 %n: 輸出一個回車換行符,Windows平臺爲"\r\n",Unix平臺爲"\n"輸出日誌信息換行 能夠在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如: 1)%20c:指定輸出category的名稱,最小的寬度是20,若是category的名稱小於20的話,默認的狀況下右對齊。 2)%-20c:指定輸出category的名稱,最小的寬度是20,若是category的名稱小於20的話,"-"號指定左對齊。 3)%.30c:指定輸出category的名稱,最大的寬度是30,若是category的名稱大於30的話,就會將左邊多出的字符截掉,但小於30的話也不會有空格。 4)%20.30c:若是category的名稱小於20就補空格,而且右對齊,若是其名稱長於30字符,就從左邊較遠輸出的字符截掉。
###一個example
log4j.rootCategory=debug,stdout,R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Threshold=info log4j.appender.stdout.Target = System.err log4j.appender.stdout.layout=org.apache.log4j.PatternLayout # Pattern to output the caller's file name and line number. log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c{1}.%M(%l) | %m%n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=test.log log4j.appender.R.MaxFileSize=1KB log4j.appender.R.Threshold = DEBUG # Keep one backup file log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c{1}.%M(%L) | %m%n