log4j用法,太詳細了,頂下!!!
我們先看一個最簡單的示例:
【示例1】
專案結構:
【注:由於這裡的多個專案公用一個jar檔,我們可以建立一個專門放置jar檔的Java工程,然後將jar檔放到lib目錄下。在要使用的工程中按圖所示進行引用 】
Java程式碼:
Java程式碼- package com.coderdream.log4j;
- import org.apache.log4j.Logger;
- public class HelloLog4j {
-
private static Logger logger = Logger.getLogger(HelloLog4j.class);
- /**
- * @param args
- */
- public static void main(String[] args) {
- // System.out.println("This is println message.");
- // 記錄debug級別的資訊
- logger.debug("This is debug message.");
- // 記錄info級別的資訊
- logger.info("This is info message.");
-
// 記錄error級別的資訊
- logger.error("This is error message.");
- }
- }
配置檔案log4j.properties:
Properties程式碼- #可以設定級別:debug>info>error
- #debug:顯示debug、info、error
- #info:顯示info、error
- #error:只error
- log4j.rootLogger=debug,appender1
- #log4j.rootLogger=info,appender1
-
#log4j.rootLogger=error,appender1
- #輸出到控制檯
- log4j.appender.appender1=org.apache.log4j.ConsoleAppender
- #樣式為TTCCLayout
- log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
輸出結果:
Console程式碼- [main] DEBUG com.coderdream.log4j.HelloLog4j - This is debug message.
- [main] INFO com.coderdream.log4j.HelloLog4j - This is info message.
- [main] ERROR com.coderdream.log4j.HelloLog4j - This is error message.
通過配置檔案可知,我們需要配置3個方面的內容:
1、根目錄(級別和目的地);
2、目的地(控制檯、檔案等等);
3、輸出樣式。
下面我們來看看Log4J的類圖:
Logger - 日誌寫出器,供程式設計師輸出日誌資訊
Appender - 日誌目的地,把格式化好的日誌資訊輸出到指定的地方去
ConsoleAppender - 目的地為控制檯的Appender
FileAppender - 目的地為檔案的Appender
RollingFileAppender - 目的地為大小受限的檔案的Appender
Layout - 日誌格式化器,用來把程式設計師的logging request格式化成字串
PatternLayout - 用指定的pattern格式化logging request的Layout
Log4j基本使用方法
Log4j由三個重要的元件構成:日誌資訊的優先順序,日誌資訊的輸出目的地,日誌資訊的輸出格式。日誌資訊的優先順序從高到低有ERROR、WARN、 INFO、DEBUG,分別用來指定這條日誌資訊的重要程度;日誌資訊的輸出目的地指定了日誌將列印到控制檯還是檔案中;而輸出格式則控制了日誌資訊的顯 示內容。
一、定義配置檔案
其實您也可以完全不使用配置檔案,而是在程式碼中配置Log4j環境。但是,使用配置檔案將使您的應用程式更加靈活。Log4j支援兩種配置檔案格式,一種是XML格式的檔案,一種是Java特性檔案(鍵=值)。下面我們介紹使用Java特性檔案做為配置檔案的方法:
1.配置根Logger,其語法為:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中,level 是日誌記錄的優先順序,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。Log4j建議只使用四個級別,優 先級從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這裡定義的級別,您可以控制到應用程式中相應級別的日誌資訊的開關。比如在這裡定 義了INFO級別,則應用程式中所有DEBUG級別的日誌資訊將不被打印出來。 appenderName就是指B日誌資訊輸出到哪個地方。您可以同時指定多個輸出目的地。
2.配置日誌資訊輸出目的地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(將日誌資訊以流格式傳送到任意指定的地方)
3.配置日誌資訊的格式(佈局),其語法為:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.option = valueN
其中,Log4j提供的layout有以e幾種:
org.apache.log4j.HTMLLayout(以HTML表格形式佈局),
org.apache.log4j.PatternLayout(可以靈活地指定佈局模式),
org.apache.log4j.SimpleLayout(包含日誌資訊的級別和資訊字串),
org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等等資訊)
Log4J採用類似C語言中的printf函式的列印格式格式化日誌資訊,列印引數如下: %m 輸出程式碼中指定的訊息
%p 輸出優先順序,即DEBUG,INFO,WARN,ERROR,FATAL
%r 輸出自應用啟動到輸出該log資訊耗費的毫秒數
%c 輸出所屬的類目,通常就是所在類的全名
%t 輸出產生該日誌事件的執行緒名
%n 輸出一個回車換行符,Windows平臺為“rn”,Unix平臺為“n”
%d 輸出日誌時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
%l 輸出日誌事件的發生位置,包括類目名、發生的執行緒,以及在程式碼中的行數。舉例:Testlog4.main(TestLog4.java:10)
二、在程式碼中使用Log4j
1.得到記錄器
使用Log4j,第一步就是獲取日誌記錄器,這個記錄器將負責控制日誌資訊。其語法為:
public static Logger getLogger( String name)
通過指定的名字獲得記錄器,如果必要的話,則為這個名字建立一個新的記錄器。Name一般取本類的名字,比如:
static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )
2.讀取配置檔案
當獲得了日誌記錄器之後,第二步將配置Log4j環境,其語法為:
BasicConfigurator.configure (): 自動快速地使用預設Log4j環境。
PropertyConfigurator.configure ( String configFilename) :讀取使用Java的特性檔案編寫的配置檔案。
DOMConfigurator.configure ( String filename ) :讀取XML形式的配置檔案。
3.插入記錄資訊(格式化日誌資訊)
當上兩個必要步驟執行完畢,您就可以輕鬆地使用不同優先級別的日誌記錄語句插入到您想記錄日誌的任何地方,其語法如下:
Logger.debug ( Object message ) ;
Logger.info ( Object message ) ;
Logger.warn ( Object message ) ;
Logger.error ( Object message ) ;
示例2~示例8
【示例2】 輸出為文字檔案或HTML檔案
Porperties程式碼- #設定級別:
- log4j.rootLogger=debug,appender1
- #輸出到檔案(這裡預設為追加方式)
- log4j.appender.appender1=org.apache.log4j.FileAppender
- #設定檔案輸出路徑
- #【1】文字檔案
- #log4j.appender.appender1.File=c:/Log4JDemo02.log
- #【2】HTML檔案
- log4j.appender.appender1.File=c:/Log4JDemo02.html
- #設定檔案輸出樣式
- #log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
- log4j.appender.appender1.layout=org.apache.log4j.HTMLLayout
【 示例3】 輸出為文字檔案或HTML檔案
Properties程式碼- #設定級別和多個目的地
- log4j.rootLogger=debug,appender1,appender2
- #輸出到控制檯
- log4j.appender.appender1=org.apache.log4j.ConsoleAppender
- #設定輸出樣式
- log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
- #輸出到檔案(這裡預設為追加方式)
- log4j.appender.appender2=org.apache.log4j.FileAppender
- #設定檔案輸出路徑
- #【1】文字檔案
- #log4j.appender.appender2.File=c:/Log4JDemo02.log
- #【2】HTML檔案
- log4j.appender.appender2.File=c:/Log4JDemo02.html
- #設定檔案輸出樣式
- #log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout
- log4j.appender.appender2.layout=org.apache.log4j.HTMLLayout
【示例4】 SimpleLayout樣式
Properties程式碼- #設定級別和目的地
- log4j.rootLogger=debug,appender1
- #輸出到控制檯
- log4j.appender.appender1=org.apache.log4j.ConsoleAppender
- #設定輸出樣式
- log4j.appender.appender1.layout=org.apache.log4j.SimpleLayout
輸出結果:
控制檯程式碼- DEBUG - This is debug message.
- INFO - This is info message.
- ERROR - This is error message.
【示例5】 自定義樣式
Java程式碼- #設定級別和目的地
- log4j.rootLogger=debug,appender1
- #輸出到控制檯
- log4j.appender.appender1=org.apache.log4j.ConsoleAppender
- #設定輸出樣式
- log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
- #自定義樣式
- # %r 時間 0
- # %t 方法名 main
- # %p 優先順序 DEBUG/INFO/ERROR
- # %c 所屬類的全名(包括包名)
- # %l 發生的位置,在某個類的某行
- # %m 輸出程式碼中指定的訊息,如log(message)中的message
- # %n 輸出一個換行
- log4j.appender.appender1.layout.ConversionPattern=%r [%t] [%p] - %c -%l -%m%n
輸出結果:
控制檯程式碼- 0 [main] [DEBUG] - com.coderdream.log4j.HelloLog4j
- -com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:16) -This is debug message.
- 31 [main] [INFO] - com.coderdream.log4j.HelloLog4j
- -com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:18) -This is info message.
- 31 [main] [ERROR] - com.coderdream.log4j.HelloLog4j
- -com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:20) -This is error message.
【示例6】 多目的地、自定義樣式
Properties程式碼- #設定級別和目的地
- log4j.rootLogger=debug,appender1,appender2
- #輸出到控制檯
- log4j.appender.appender1=org.apache.log4j.ConsoleAppender
- #設定輸出樣式
- log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
- #自定義樣式
- # %r 時間 0
- # %t 方法名 main
- # %p 優先順序 DEBUG/INFO/ERROR
- # %c 所屬類的全名(包括包名)
- # %l 發生的位置,在某個類的某行
- # %m 輸出程式碼中指定的訊息,如log(message)中的message
- # %n 輸出一個換行符號
- log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n
- #輸出到檔案(這裡預設為追加方式)
- log4j.appender.appender2=org.apache.log4j.FileAppender
- #設定檔案輸出路徑
- #【1】文字檔案
- log4j.appender.appender2.File=c:/Log4JDemo06.log
- #設定檔案輸出樣式
- log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
- log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n
【示例7】 【企業應用】設定 特定包的級別和目的地
先增加一個包,新建一個類:
Java程式碼- package com.coderdream.log4jDao;
- import org.apache.log4j.Logger;
- public class HelloDao {
- private static Logger logger = Logger.getLogger(HelloDao.class);
- /**
- * @param args
- */
- public static void main(String[] args) {
- // 記錄debug級別的資訊
- logger.debug("This is debug message from Dao.");
- // 記錄info級別的資訊
- logger.info("This is info message from Dao.");
- // 記錄error級別的資訊
- logger.error("This is error message from Dao.");
- }
- }
如果這個類作為基類,如J2EE中的BaseDao、BaseAction、BaseService等等,則我們可以將各層的日誌資訊分類輸出到各個檔案。
Properties程式碼- #省略根,只設置特定包的級別和目的地
- log4j.logger.com.coderdream.log4j=debug,appender1
- log4j.logger.com.coderdream.log4jDao=info,appender1,appender2
- #輸出到控制檯
- log4j.appender.appender1=org.apache.log4j.ConsoleAppender
- #設定輸出樣式
- log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
- #自定義樣式
- # %r 時間 0
- # %t 方法名 main
- # %p 優先順序 DEBUG/INFO/ERROR
- # %c 所屬類的全名(包括包名)
- # %l 發生的位置,在某個類的某行
- # %m 輸出程式碼中指定的訊息,如log(message)中的message
- # %n 輸出一個換行符號
- log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n
- #輸出到檔案(這裡預設為追加方式)
- log4j.appender.appender2=org.apache.log4j.FileAppender
- #設定檔案輸出路徑
- #【1】文字檔案
- log4j.appender.appender2.File=c:/Log4JDemo07_Dao.log
- #設定檔案輸出樣式
- log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
- log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n
【示例8】 log4j.xml的配置方式
Xml程式碼- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
- <log4j:configuration