apache的log4j

Log4j的Jar包下載地址:http://logging.apache.org/,具體步驟在Log4jDemo註釋。

     * Log4j技術
     * 在程序中的日誌實現步驟
     * 項目:log4j
     * 若要在自己的程序中寫入日誌語句,則可按照以下步驟進行:
     * (1)導入Jar包
     * 在項目中導入log4j需要的jar包。將Log4j框架的zip文件進行解壓,在其根目錄下就有其jar包。
     * 本次演示爲:log4j-1.2.17.jar
     * (2)放入日誌輸出控制文件
     * 將屬性文件log4j.properties直接放到項目的src下
     * (3)代碼中實現日誌記錄
     * 在輸出日誌的類中創建日誌對象Logger,並通過Logger的方法在代碼中加入日誌輸出語句。在Java代碼中進行日誌輸出,需要用到Logger類的靜態方法getLogger()。
     * 注意,Logger爲org.apache.log4j包中的類。

代碼實現:

import org.apache.log4j.Logger;

public class Log4jDemo {
	/*
	 * 一個完成的軟件,日誌是不可少的。程序從開發、測試、維護、運行等環節,都需要想控制檯或文件等位置輸出大量信息。這些信息的輸出,在很多時候是使用System.out.println()無法完成的。
	 * 日誌信息根據用途與記錄內容的不同,分爲調試日誌、運行日誌、異常日誌等。
	 * 用於日誌記錄的技術很多,如jdk的logger技術,apache的log4j、log4j2技術等。
	 * Log4j的全稱Log for java,即專門用於java語言的日誌記錄工具。

	 * Log4j下載地址:http://logging.apache.org/
	 * 具體下載步驟如下
	 *  步驟1:進入“http://logging.apache.org/”
	 *  步驟2:點頁面“Apache Log4j”下的“Project site »”按鈕
	 *  步驟3:點頁面左側窗口的“Download”,進入的是最新版本的下載頁,本次測試使用的是log4j-1.2.17版本,
	 *      (1)bin代表二進制class文件(由java文件編譯而成),src代表源碼(java源碼),源碼source比binary大一些,一般正常使用下載bin類型即可,如果要學習源碼下載src類型。
	 *      (2).tar.gz是linux的壓縮包,.zip是windows的壓縮包
	 *          因此:bin.tar.gz是適用於linux、MacOsX系統的二進制文件
	 *               bin.zip是適用於windows的二進制文件
	 *               src.tar.gz是linux下的源碼
	 *               src.zip是windows的源碼
	 *  步驟4:本次測試使用的是log4j-1.2.17版本,點All previous releases of Apache log4j can be found in the archive repository.中的“archive repository”按鈕查詢所有舊版本
	 *  步驟5:點開1.2.17/    2018-11-10 21:02 的舊版本,選擇log4j-1.2.17.zip 2013-01-31 17:53 4.5M進行下載,解壓後的log4j-1.2.17.jar

	 * 日誌級別
	 * 爲了方便對於日誌信息的輸出顯示,對日誌內容進行了分級管理。日誌級別由高到低,共分多個級別:fatal(致命的)、error、warn、info、debug、trace(堆棧)。
	 * 無論是將對日誌輸出到控制檯,還是文件,其輸出都會降低程序的運行效率。但由於調試、運行維護的需求,客戶的要求等原因,需要進行必須的日誌輸出。這時就必須要在代碼中既然日誌輸出語句。
	 * 這些輸出語句若在程序運行時全部執行,則勢必會降低運行效率。例如,使用System.out.println()將信息輸出到控制檯,則所有的該輸出語句均將執行。會大大降低程序的執行效率。而要使其不輸出,唯一的辦法就是將這些輸出語句逐個全部刪除。這是個費時費力的過程。
	 * 將日誌信息進行分級管理,便可方便的控制信息輸出內容及輸出位置:哪些信息需要輸出,哪些信息不需要輸出,只需要在一個日誌輸出控制文件中稍加修改即可。而代碼中的輸出語句不用做任何修改。
	 * 從這個角度來說,代碼中的日誌編寫,其實就是寫大量的輸出語句。只不過,這些輸出語句比較特殊,它們具有級別,在程序運行期間不一定被執行。它們的執行是由另一個控制文件控制。

	 * 日誌輸出控制文件
	 * Log4j的日誌輸出控制文件,主要由三個部分構成:
	 * (1)日誌信息的輸出位置:控制日誌信息將要輸出的位置,是控制檯還是文件等。
	 * (2)日誌信息的輸出格式:控制日誌信息的顯示格式,即以怎樣的字符串形式顯示。
	 * (3)日誌信息的輸出級別:控制日誌信息的顯示內容,即顯示哪些級別的日誌信息。
	 * 有了日誌輸出控制文件,代碼中只要設置好日誌信息內容及其級別即可,通過控制文件便可控制這些日誌信息的輸出。

	 * Log4j技術
	 * 在程序中的日誌實現步驟
	 * 項目:log4j
	 * 若要在自己的程序中寫入日誌語句,則可按照以下步驟進行:
	 * (1)導入Jar包
	 * 在項目中導入log4j需要的jar包。將Log4j框架的zip文件進行解壓,在其根目錄下就有其jar包。
	 * 本次演示爲:log4j-1.2.17.jar
	 * (2)放入日誌輸出控制文件
	 * 將屬性文件log4j.properties直接放到項目的src下
	 * (3)代碼中實現日誌記錄
	 * 在輸出日誌的類中創建日誌對象Logger,並通過Logger的方法在代碼中加入日誌輸出語句。在Java代碼中進行日誌輸出,需要用到Logger類的靜態方法getLogger()。
	 * 注意,Logger爲org.apache.log4j包中的類。
 
	 * 代碼中事項
	 * ① 若項目src穆下沒有log4j.properties會報異常如下:
	 *   Please initialize the log4j system properly.
	 * ② 日誌輸出會根據log4j.properties文件中日誌級別的設置進行輸出,會輸出到指定位置。
	 *   輸出指定級別及其更高級別的信息。如指定info級別,則會輸出fatal、error、warn、info級別的信息
	 * ③ 日誌輸出控制文件分析
	 *      (1)日誌屬性文件log4j.properties是專門用於控制日誌輸出的。其主要進行三方面控制:
	 *         輸出位置:控制日誌將要輸出的位置,是控制檯還是文件等
	 *         輸出佈局:控制日誌信息的顯示形式
	 *         輸出級別:控制要輸出的日誌級別
	 *      (2)日誌屬性文件由兩個對象組成:日誌附加器+根日誌
	 *         根日誌:即爲Java代碼中的日誌記錄器,其主要由兩個屬性構成:日誌輸出級別與日誌附加器
	 *         日誌附加器:是由日誌輸出位置定義,由其它很多屬性進行修飾,如輸出佈局、文件位置、文件大小等。
	 *         log4j.properties
	 *           /   /    \   \
	 *          /   /      \   \
	 *   日誌輸出級別  日誌附加器1 ... 日誌附加器N
	 *             / /  \ \
	 *            / /    \ \
	 *      輸出佈局 文件位置 ... 文件大小
	 *      (3)定義日誌附加器appender
	 *         所謂日誌附加器,就是爲日誌記錄器附加上很多其它設置信息。附加器的本質是一個接口,其定義語法爲:log4j.appender.appenderName=輸出位置
	 *         appenderName爲自定義名稱
	 *         輸出位置爲log4j指定的類型,是定義好的一些appender接口的實現類。查看log4j框架解壓目錄下的站點目錄site的index.jsp中的JavaDoc,可看到log4j的API。
	 *         常用的附加器實現類(Interface Appender)如下:
	 *            org.apache.log4j.ConsoleAppender:日誌輸出到控制檯
	 *            org.apache.log4j.FileAppender:日誌輸出到文件
	 *            org.apache.log4j.RollingFileAppender:當日志文件大小到達指定尺寸的時候將產生一個新的日誌文件
	 *            org.apache.log4j.DailyRollingFileAppender:每天產生一個日誌文件
	 *         例:定義一個名稱爲console的控制檯附加器:
	 *             ##define an appender named console
	 *             log4j.appender.console=org.apache.log4j.ConsoleAppender
	 *      (4)修飾日誌附加器
	 *         所謂修飾日誌附加器,就是爲定義好的附加器添加一些屬性,已控制到指定位置的輸出。不同的附加器,其修飾屬性不同。
	 *            控制檯附加器:
	 *               Target:控制輸出到控制檯的使用目標。其值爲System.out或System.err。它們的區別是,System.out是以黑色字體顯示到控制檯,而System.err則是以紅色字體顯示
	 *               例:##define an appender named console
	 *                  log4j.appender.console=org.apache.log4j.ConsoleAppender
	 *                  #The Target value is System.out or System.err
	 *                  log4j.appender.console.Target=System.out
	 *                  
	 *            文件附加器:
	 *               File日誌要輸出的文件位置及文件名稱
	 *               例:##define an appender named file
	 *                  log4j.appender.file=org.apache.log4j.FileAppender
	 *                  #define the file path and name
	 *                  log4j.appender.file.File=d:/logfile.txt
	 *                  
	 *            滾動文件附加器:
	 *               MaxFileSize:用於指定日誌文件的最大值,若文件超過指定值,將自動產生另一個日誌文件
	 *               例:##define an appender named rollfile
	 *                  log4j.appender.rollfile=org.apache.log4j.RollingFileAppender
	 *                  #define the file path and name
	 *                  log4j.appender.rollfile.File=d:/logrollfile.txt
	 *                  #set the log's size
	 *                  log4j.appender.rollfile.MaxFileSize=10KB
	 *                  #set the layout type of the apperder
	 *                  log4j.appender.rollfile.layout=org.apache.log4j.PatternLayout
	 *                  #set the layout format pattern
	 *                  log4j.appender.rollfile.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}] %c %L %m%n
	 *            
	 *            log4j常用日誌信息的格式(佈局)類型:
	 *               org.apache.log4j.HTMLLayout(網頁佈局,以HTML表格形式佈局),    
	 *               org.apache.log4j.SimpleLayout(簡單佈局,包含日誌信息的級別和信息字符串),  
	 *               org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息),
	 *               org.apache.log4j.PatternLayout(匹配器佈局,可以靈活地指定佈局模式。其主要是通過設置PatternLayout的ConversionPattern屬性值來控制具體輸出格式的。)
	 *                  ConversionPattern的值中有很多控制字符,這些字符的意義如下表所示:
	 *                  格式名 含義
	 *                     %c 輸出日誌信息所屬的類的全名
	 *                     %d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也可以在其後指定格式,比如:%d{yyyy-MM-dd HH:mm:ss },輸出類似:2002-10-18- 22:10:28
	 *                     %f 輸出日誌信息所屬的類的類名
	 *                     %l 輸出日誌事件的發生位置,即輸出日誌信息的語句處於它所在的類的第幾行
	 *                     %m 輸出代碼中指定的信息,如log(message)中的message
	 *                     %n 輸出一個回車換行符,Windows平臺爲“rn”,Unix平臺爲“n”
	 *                     %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL。如果是調用debug()輸出的,則爲DEBUG,依此類推
	 *                     %r 輸出自應用啓動到輸出該日誌信息所耗費的毫秒數
	 *                     %t 輸出產生該日誌事件的線程名
	 *      (5)配置根Logger
	 *         配置rootLogger,以便於代碼加載來控制日誌的輸出。其語法爲:log4j.rootLogger=[level],appenderName,...
	 *         其中,level是日誌記錄的優先級,分爲OFF/FATAL/ERROR/WARN/INFO/DEBUG/ALL。Log4j建議只使用四個優先級,優先級從高到低分別是ERROR/WARN/INFO/DEBUG。OFF爲關閉日誌功能。
	 *         低級別的可以顯示高級別的,但是高級別的不能顯示低級別的。所以級別越高顯示的日誌信息越少。
	 */
	public static void main(String[] args) {
		// 創建日誌記錄對象Logger
		Logger logger = Logger.getLogger(Log4jDemo.class);

		logger.debug("this is dubug message");
		logger.info("this is info message");
		logger.warn("this is warn message");
		logger.error("this is error message");
		
	}
}

log4j.properties文件的演示:

##define an appender named console
log4j.appender.console=org.apache.log4j.ConsoleAppender
#The Target value is System.out or System.err
log4j.appender.console.Target=System.out
#set the layout type of the apperder
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#set the layout format pattern
log4j.appender.console.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}] %c %L %m%n


##define an appender named file
log4j.appender.file=org.apache.log4j.FileAppender
#define the file path and name
log4j.appender.file.File=d:/logsfile.txt
#set the layout type of the apperder
log4j.appender.file.layout=org.apache.log4j.PatternLayout
#set the layout format pattern
log4j.appender.file.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}] %c %L %m%n


##define an appender named rollfile
log4j.appender.rollfile=org.apache.log4j.RollingFileAppender
#define the file path and name
log4j.appender.rollfile.File=d:/logrollfile.txt
#set the log's size
log4j.appender.rollfile.MaxFileSize=10KB
#set the layout type of the apperder
log4j.appender.rollfile.layout=org.apache.log4j.PatternLayout
#set the layout format pattern
log4j.appender.rollfile.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}] %c %L %m%n


##define a logger
#log4j.logger.\u5168\u9650\u5B9A\u6027\u7C7B\u540D\u6216\u63A5\u53E3\u540D=INFO,console,file,rollfile
log4j.rootLogger=INFO,console,file,rollfile

希望對你有幫助,祝你有一個好心情,加油!

若有錯誤、不全、可優化的點,歡迎糾正與補充!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章