Log4J基礎

Log4J採用類似C語言中的printf函數的打印格式格式化日誌信息,打印參數見表1如下:

%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 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10)
  
基本應用

Log4J的配置
現在來看log4j.properties配置文件的意義。第一行指定了根Logger的級別是DEBUG,並將此指定輸出到A1。A1就是第二行定義的org.apache.log4j.ConsoleAppender,此行表示將A1輸出到控制檯。第三行規定了輸出到A1的格式爲org.apache.log4j.PatternLayout。第四行規定了輸出到A1格式的轉換模式爲org.javaresearch.log4j.TestLog4J。
很多成熟的服務器類的軟件日誌信息會輸出到控制檯,同時輸出到日誌文件備查。使用Log4J可以在不改變任何代碼的情況下,僅通過修改配置文件就可以輕鬆地完成這項功能。相關配置文件如下:
#### Use two appenders, one to log to console, another to log to a file
log4j.rootCategory=debug, stdout, R
# Print only messages of priority WARN or higher for your category
log4j.category.your.category.name=WARN
#### First appender writes to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
#### Second appender writes to a file
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
# Control the maximum log file size
log4j.appender.R.MaxFileSize=100KB
# Archive log files (one backup file here)
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
 
這個配置文件指定了兩個輸出源stdout和R。前者把日誌信息輸出到控制檯,後者是一個輪轉日誌文件。最大的文件是100KB,當一個日誌文件達到最大尺寸時,Log4J會自動把example.log重命名爲example.log.1,然後重建一個新的example.log文件,依次輪轉。
在Web應用中使用
在Web應用中,應該在哪兒對Log4J進行配置呢?首先要明確,Log4J必須在應用的其它代碼執行前完成初始化。因爲Servlet是在Web服務器啓動時立即裝入的,所以,在Web應用中一般使用一個專門的Servlet來完成Log4J的配置,並保證在web.xml的配置中,這個Servlet位於其它Servlet之前。下面是一個例子,代碼如下:
package org.javaresearch.log4j;
import java.io.*;
import javax.servlet.*;
import org.apache.log4j.*;
public class Log4JInit extends HttpServlet {
public void init() throws ServletException {
String prefix = getServletContext().getRealPath("/");
String file = getServletConfig().getInitParameter("log4j-config-file");
// 從Servlet參數讀取log4j的配置文件
if (file != null) {
PropertyConfigurator.configure(prefix + file);
}
}
public void doGet(HttpServletRequest request,HttpServletResponse response)throws
IOException, ServletException {}
public void doPost(HttpServletRequest request,HttpServletResponse response)throws
IOException, ServletException {}
}
 
<servlet>
<servlet-name>log4jinit</servlet-name>
<servlet-class>org.javaresearch. log4j.Log4JInit</servlet-class>
<init-param>
<param-name> log4j-config-file </param-name>
<param-value>/properties/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
 
注意:上面的load-on-startup應設爲1,以便在Web容器啓動時即裝入該Servlet。log4j.properties文件放在根的properties子目錄中,也可以把它放在其它目錄中。應該把.properties文件集中存放,這樣方便管理。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章