1. 程式人生 > >Log4j_2_配置引數詳解

Log4j_2_配置引數詳解

  1. Log4j中有三個主要的元件,它們分別是 Logger、Appender和Layout,Log4j
    允許開發人員定義多個Logger,每個Logger擁有自己的名字,Logger之間通過名字來表明隸屬關係。有一個Logger稱為Root,它永遠
    存在,且不能通過名字檢索或引用,可以通過Logger.getRootLogger()方法獲得,其它Logger通過
    Logger.getLogger(String name)方法。
  2. Appender則是用來指明將所有的log資訊存放到什麼地方,Log4j中支援多種appender,如console、files、GUI components、NT Event
    Loggers等,一個Logger可以擁有多個Appender,也就是你既可以將Log資訊輸出到螢幕,同時儲存到一個檔案中。
  3. Layout的作用是控制Log資訊的輸出方式,也就是格式化輸出的資訊。 Log4j中將要輸出的Log資訊定義了5種級別,依次為DEBUG、INFO、WARN、ERROR和FATAL,當輸出時,只有級別大於等於配置中規定的級別的資訊才能真正的輸出(配置多個,只要符合的,都會記錄info也會記錄error),這樣就很方便的來配置不同情況下要輸出的內容,而不需要更改程式碼。

配置根Logger,其語法為:

log4j.rootLogger = [ level ] , appenderName, appenderName, ...

level 是日誌記錄的優先順序

log4j中有五級logger,他們的優先順序是依次降低
FATAL
ERROR
WARN
INFO
DEBUG
它相當於一個總控開關,只有級別到這個極端的或以上的日誌才被記錄
appenderName就是指定日誌資訊輸出到哪個地方。您可以同時指定多個輸出目的地。

配置日誌資訊輸出目的地Appender,其語法為

log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
log4j.appender.appenderName.option = valueN

Log4j提供的appender有以下幾種:
org.apache.log4j.ConsoleAppender(控制檯),
org.apache.log4j.FileAppender(檔案),
org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌檔案),
org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候產生一個新的檔案),
org.apache.log4j.WriterAppender(將日誌資訊以流格式傳送到任意指定的地方)`

配置日誌資訊的格式(佈局),其語法為:

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
log4j.appender.appenderName.layout.option = valueN

Log4j提供的layout有以下幾種:
org.apache.log4j.HTMLLayout(以HTML表格形式佈局),
org.apache.log4j.PatternLayout(可以靈活地指定佈局模式),
org.apache.log4j.SimpleLayout(包含日誌資訊的級別和資訊字串),
org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等等資訊)

列印引數:

log4j.appender.log.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t ] %m%n

Log4J採用類似C語言中的printf函式的列印格式格式化日誌資訊,如下:
  %m 輸出程式碼中指定的訊息
  %p 輸出優先順序,即DEBUG,INFO,WARN,ERROR,FATAL
  %r 輸出自應用啟動到輸出該log資訊耗費的毫秒數
  %c 輸出所屬的類目,通常就是所在類的全名
  %t 輸出產生該日誌事件的執行緒名
  %n 輸出一個回車換行符,Windows平臺為“/r/n”,Unix平臺為“/n”
  %d 輸出日誌時間點的日期或時間。
預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},輸出類似:2002年10月18日 22 : 10 : 28 , 921
%l 輸出日誌事件的發生位置,包括類目名、發生的執行緒,以及在程式碼中的行數。

特別注意以下引數設定:

log4j.appender.log.Threshold = ERROR 

它是表示在總控開關的前提,覺得精確,只有達到這個級別的日誌才被記錄到這個檔案中

log4j.rootLogger=info, stdout, log, errorlog
log4j.Logger=search,Test

###Console ###
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 =  %d{ABSOLUTE} [ %t ] [ %p ]:%L - %m%n

### Log ###  
##配置日誌資訊輸出目的地Appender,一共有五種,控制檯,檔案,每天產生一個日誌檔案,檔案大小到達指定尺寸的時候產生一個新的檔案,將日誌資訊以流格式傳送到任意指定的地方等
log4j.appender.log = org.apache.log4j.DailyRollingFileAppender
##日誌輸出檔案所在位置
log4j.appender.log.File = log/log.log
##
log4j.appender.log.Append = true
##日誌記錄的優先順序,一共有五個級別,它是表示在總控開關的前提,覺得精確,只有達到這個級別的日誌才被記錄到這個檔案中
log4j.appender.log.Threshold = INFO
##日期型別
log4j.appender.log.DatePattern='.'yyyy-MM-dd
##日誌資訊的格式(佈局),一共有四種:PatternLayout(可以靈活地指定佈局模式)
log4j.appender.log.layout = org.apache.log4j.PatternLayout
##指定佈局模式
log4j.appender.log.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t ] %m%n

### Error ###
log4j.appender.errorlog = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorlog.File = log/errorlog.log
log4j.appender.errorlog.Append = true
log4j.appender.errorlog.Threshold = ERROR 
log4j.appender.errorlog.DatePattern='.'yyyy-MM-dd
log4j.appender.errorlog.layout = org.apache.log4j.PatternLayout
log4j.appender.errorlog.layout.ConversionPattern =%-d{yyyy-MM-dd HH:mm:ss} [ %t ] %m%n