天天看點

Log4j配置詳解

Log4j配置詳解2008-02-14 11:35在實際程式設計時,要使Log4j真正在系統中運作事先還要對配置檔案進行定義。定義步驟就是對Logger、Appender及Layout的分别使用。

Log4j支援兩種配置檔案格式,一種是XML格式的檔案,一種是java properties(key=value)【Java特性檔案(鍵=值)】。下面我們介紹使用Java特性檔案做為配置檔案的方法

具體如下:

  

  1、配置根Logger,其文法為:

  log4j.rootLogger = [ level ] , appenderName1, appenderName2, …

level : 是日志記錄的優先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級别。Log4j建議隻使用四個級别,優先級從高到低分别是ERROR、WARN、INFO、DEBUG。通過在這裡定義的級别,您可以控制到應用程式中相應級别的日志資訊的開關。比如在這裡定 義了INFO級别,則應用程式中所有DEBUG級别的日志資訊将不被列印出來。

  appenderName:就是指定日志資訊輸出到哪個地方。您可以同時指定多個輸出目的地。

例如:log4j.rootLogger=info,A1,B2,C3

  2、配置日志資訊輸出目的地,其文法為:

  log4j.appender.appenderName = fully.qualified.name.of.appender.class //

   "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(将日志資訊以流格式發送到任意指定的地方)

1.ConsoleAppender選項

Threshold=WARN:指定日志消息的輸出最低層次。

ImmediateFlush=true:預設值是true,意謂着所有的消息都會被立即輸出。

Target=System.err:預設情況下是:System.out,指定輸出控制台

2.FileAppender 選項

File=mylog.txt:指定消息輸出到mylog.txt檔案。

Append=false:預設值是true,即将消息增加到指定檔案中,false指将消息覆寫指定的檔案内容。

3.DailyRollingFileAppender 選項

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: 每分鐘

4.RollingFileAppender 選項

MaxFileSize=100KB: 字尾可以是KB, MB 或者是 GB. 在日志檔案到達該大小時,将會自動滾動,即将原來的内容移到mylog.log.1檔案。

MaxBackupIndex=2:指定可以産生的滾動檔案的最大數。 實際應用:

  log4j.appender.A1=org.apache.log4j.ConsoleAppender //這裡指定了日志輸出的第一個位置A1是控制台ConsoleAppender

  3、配置日志資訊的格式,其文法為:

  A.log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

"fully.qualified.name.of.layout.class" 可以指定下面4個格式中的一個:

1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),

   2.org.apache.log4j.PatternLayout(可以靈活地指定布局模式),

   3.org.apache.log4j.SimpleLayout(包含日志資訊的級别和資訊字元串),

   4.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=org.apache.log4j.PatternLayout

B. 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},輸出類似: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字元,就從左邊交遠銷出的字元截掉。

  這裡上面三個步驟是對前面Log4j元件說明的一個簡化;下面給出一個具體配置例子,在程式中可以參照執行:

  log4j.rootLogger=INFO,A1,B2

  log4j.appender.A1=org.apache.log4j.ConsoleAppender

  log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n

  根據上面的日志格式,某一個程式的輸出結果如下:

  0  INFO 2003-06-13 13:23:46968 ClientWithLog4j Client socket: Socket[addr=localhost/127.0.0.1,port=8002,localport=2014]

16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server says: 'Java server with log4j, Fri Jun 13 13:23:46 CST 2003'

  16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j GOOD

  16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Command 'HELLO' not understood.'

  16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j HELP

  16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Vocabulary: HELP QUIT'

  16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j QUIT

4. # 當輸出資訊于復原檔案時

log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender //指定以檔案的方式輸出日志

log4j.appender.ROLLING_FILE.Threshold=ERROR

log4j.appender.ROLLING_FILE.File=rolling.log //檔案位置,也可以用變量${java.home}、rolling.log

log4j.appender.ROLLING_FILE.Append=true

log4j.appender.ROLLING_FILE.MaxFileSize=10KB //檔案最大尺寸

log4j.appender.ROLLING_FILE.MaxBackupIndex=1 //備份數

log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout

log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n   

××××××××××××××××××××××××××××××××××××××××××××××××

附:Log4j比較全面的配置

LOG4J的配置之簡單使它遍及于越來越多的應用中了:Log4J配置檔案實作了輸出到控制台、檔案、復原檔案、發送日志郵件、輸出到資料庫日志表、自定義标簽等全套功能。擇其一二使用就夠用了,

log4j.rootLogger=DEBUG,CONSOLE,A1,im

log4j.addivity.org.apache=true

# 應用于控制台

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.Threshold=DEBUG

log4j.appender.CONSOLE.Target=System.out

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout

log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n

#應用于檔案

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

# Use this layout for LogFactor 5 analysis

# 應用于檔案復原

log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender

log4j.appender.ROLLING_FILE.Append=true //true:添加 false:覆寫

log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

#應用于socket

log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender

log4j.appender.SOCKET.RemoteHost=localhost

log4j.appender.SOCKET.Port=5001

log4j.appender.SOCKET.LocationInfo=true

# Set up for Log Facter 5

log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout

log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n

# Log Factor 5 Appender

log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender

log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000

# 發送日志給郵件

log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender

log4j.appender.MAIL.Threshold=FATAL

log4j.appender.MAIL.BufferSize=10

<a href="mailto:[email protected]">[email protected]</a>

log4j.appender.MAIL.SMTPHost=www.wusetu.com

log4j.appender.MAIL.Subject=Log4J Message

<a href="mailto:[email protected]">[email protected]</a>

log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout

log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

# 用于資料庫

log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender

log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test

log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver

log4j.appender.DATABASE.user=root

log4j.appender.DATABASE.password=

log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')

log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout

log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender

log4j.appender.A1.File=SampleMessages.log4j

log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'

log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout

#自定義Appender

log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender

log4j.appender.im.host = mail.cybercorlin.net

log4j.appender.im.username = username

log4j.appender.im.password = password

log4j.appender.im.layout=org.apache.log4j.PatternLayout

log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n