log4j.properties文件詳解

聲明

本文內容參考: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)

若是看了前文,咱們能夠知道這是一個輸出在控制檯日誌配置,那麼下面的信息是幹什麼用的呢?咱們慢慢來說。

  1. log4j.appender.stdout.Threshold=info ,指定日誌消息的輸出最低層次爲info。級別的大小按前文的表格來。可是有時候咱們會發現,設置的東西好像會不起做用。那是由於在log4j.rootCategory=INFO,stdout,R中也設置了日誌最低級別,日誌首先會按rootCategory中定義來,再按Threshold定義。也就是說,若是在rootCategory中定義爲info,咱們在Threshold定義debug也不會輸出debug日誌。 2.log4j.appender.stdout.Target = System.out,默認狀況,指定輸出控制檯。還有System.err,輸出的效果就是報錯的感受了。
  2. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout,配置日誌信息的格式中的靈活地指定佈局模式。ConversionPattern就是格式信息了。
  3. log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c{1}.%M(%l) ,日誌格式信息,具體什麼含義後文會說明。

###文件日誌配置 同樣的咱們須要定義一個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

上面的代碼中能夠咱們來慢慢看:

  1. log4j.appender.R.File=test.log,日誌保存到test.log文件。
  2. og4j.appender.R.MaxFileSize=10000KB,文件大小,單位有B,KB,MB,GB,在日誌文件到達該大小時,將會自動滾動,即將原來的內容移到mylog.log.1文件。
  3. log4j.appender.R.Threshold = DEBUG,這個就不說了。
  4. log4j.appender.R.MaxBackupIndex=1,指定能夠產生的滾動文件的最大數。
  5. 最後兩行應該也不用說了。
  6. 注意: Log4j中的RollingFileAppender是指知足必定大小後從新生成新的日誌文件,我實驗後發現生成的文件名格式是XXX.log.i(XXX是日誌的名字,i從1往上遞增)。 可是其中有個問題,自動生成的日誌文件中XXX.log.MAX永遠都是最初生成的那個日誌,而XXX.log.1永遠是剛生成的那個日誌,也就是說日誌的文件名在每生成一個新的文件後,全部的日誌文件名都會改變一次。

####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
相關文章
相關標籤/搜索