標籤:
Apache log4j的官方介紹是“log4j is a reliable, fast and flexible logging framework (APIs) written in Java, which is distributed under the Apache Software License. log4j is highly configurable through external configuration files at runtime. It views the logging process in terms of levels of priorities and offers mechanisms to direct logging information to a great variety of destinations, such as a database, file, console, UNIX Syslog, etc.”,翻譯過來就是:log4j是基於Apache Software License發行的可靠、快速、可擴充的日誌架構。log4j具有高可配置性,可以在啟動並執行過程中通過外部檔案配置它。log4j能夠根據不同的層級優先權來過濾日誌,並且提供了一種機制,能夠將日誌記錄直接寫到控制台,檔案,資料庫,UNIX系統日誌等。
上面的官方介紹,不光對log4j進行了定義,也對log4j的特點效能進行了闡述。log4j主要由logger(記錄器),appender(輸出源),layout(配置模式)三部分組成,其中logger用來捕獲日誌資訊,layout用來對日誌資訊進行格式化,appender用來定義日誌的輸出源。具體的架構可以參加:
log4j的安裝方式與添加普通的.jar類庫檔案相同,可以到官網(http://logging.apache.org/log4j/2.x/)下載相關的包,有區別的是log4j需要添加上面提到的設定檔。
那麼設定檔應該如何寫呢?
log4j設定檔,全稱為“log4j.properties”,採用key-value的形式儲存參數,也可以採用XML文檔形式來編寫配置參數。一般情況下,log4j.properties需要包含過濾層級,日誌目錄,記錄檔名,輸出源,輸出源的詳細實作類別,配置模式,以及相應的格式化參數等配置資訊,詳細內容如下:
過濾層級:ALL,TRACE,DEBUG,INFO,WARN,ERROR,FATAL
輸出源:FILE,DB,Console,對應的詳細實作類別為org.apache.log4j.FileAppender,org.apache.log4j.JDBCAppender,org.apache.log4j.ConsoleAppender。
配置模式:PatternLayout,HTMLLayout,其中PatternLayout的相應格式化參數(%[])如下表:
| C |
輸出發出日誌記錄請求的類的完全限定名,如org.example.demo.Test; |
| d |
輸出發生日誌記錄事件的日期,如%d{HH:mm:ss}; |
| m |
輸出與日誌記錄事件相相關 App程式的資訊; |
| M |
輸出發出日誌記錄請求的方法的名稱; |
| n |
輸出與系統平台相關的分行符號; |
| p |
輸出日誌的過濾層級; |
| X |
輸出發出日誌記錄請求的用戶端的IP,如X{clientIP}; |
一個採用key-value形式的具體樣本如下:
# Define the root logger and the directory of log file.logDir = E:/templog4j.rootLogger = DEBUG, FILE# Define the file appenderlog4j.appender.FILE = org.apache.log4j.FileAppenderlog4j.appender.FILE.File = ${logDir}/log.txt# Define the layout for the file appenderlog4j.appender.FILE.layout = org.apache.log4j.PatternLayoutlog4j.appender.FILE.layout.conversionPattern = %m%n
log4j.properties設定檔分為三部分,第一部分配置了記錄檔的儲存目錄logDir,同時說明將日誌的過濾層級設定為DEBUG,輸出源是FILE;第二部分配置了輸出源的詳細實作類別org.apache.log4j.FileAppender,日誌文檔名稱log.txt;第三部分則規定了日誌文檔的配置模式PatternLayout,及詳細的格式化參數%m%n。
上述設定檔的樣本用XML形式編寫後如下:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration><appender name="FILE" class="org.apache.log4j.FileAppender"> <param name="file" value="E:temp/log.txt"/> <param name="immediateFlush" value="true"/> <param name="threshold" value="debug"/> <param name="append" value="false"/> <layout class="org.apache.log4j.PatternLayout"> <param name="conversionPattern" value="%m%n"/> </layout></appender><logger name="log4j.rootLogger" additivity="false"> <level value="DEBUG"/> <appender-ref ref="FILE"/></logger></log4j:configuration>
配置完log4j.properties是不是就可以編寫Java程式運行了?
其實,到這裡log4j的配置工作還沒有結束,還需要確定log4j.properties檔案應該放置在哪個位置。官方介紹說log4j.properties應該放置到PATH或者CLASSPATH所在目錄當中,但是如果按照這樣操作,遇到每個Java工程都需要定製設定檔問題時,將會很容易造成命名衝突。合適的作法是將log4j.properties與具體的Java工程關聯,將log4j.properties放置到src包中。或者用一種更值得推薦的做法:在Java工程根目錄下建立config目錄 > 將log4j.properties放置到config目錄中 > 滑鼠右擊config目錄 > 選擇Build Path > 單擊Use as Source Folder。
現在就可以寫個Java類運行一下了,樣本如下:
1 package org.warnier.zhang.demo; 2 3 import org.apache.log4j.Logger; 4 5 public class Test { 6 /** 7 * 獲得記錄器; 8 */ 9 static Logger logger = Logger.getLogger(Test.class);10 11 public static void main(String[] args) {12 logger.debug("DEBUG > Hello World!");13 logger.info("INFO > Hello World!");14 }15 16 }
到此,Apache log4j簡明教程(一)就結束了,下一講將會講解如何將日誌輸出到MySQL資料庫。希望次教程能夠給有困擾的讀者一點協助。當然,由於筆者水平有限,如果有錯誤,歡迎讀者留言交流。
Java:Apache log4j簡明教程(一)