Apache Log4j 是 Java 專案最廣泛使用的日誌框架。本文詳細說明在 Web 應用中透過 Servlet 初始化 Log4j,並配置 log4j.properties 實現控制台與滾動檔案雙重輸出。
實作 HttpServlet,在 init() 方法中讀取 web.xml 設定的初始化參數,載入屬性檔:
package net.welovetennis.util.log;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.log4j.*;
public class Log4jInit extends HttpServlet {
public void init() throws ServletException {
String prefix = getServletContext().getRealPath("/");
String file = getInitParameter("log4j");
System.out.println("................log4j start");
if (file != null) {
PropertyConfigurator.configure(prefix + file);
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response) {}
public void destroy() {}
}
設定 load-on-startup 為 1,確保應用啟動時優先初始化:
<servlet>
<servlet-name>log4jinit</servlet-name>
<servlet-class>net.welovetennis.util.log.Log4jInit</servlet-class>
<init-param>
<param-name>log4j</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
放置於 WEB-INF/ 目錄下,配置兩個 Appender:
log4j.rootLogger=INFO, A1, R
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=c:/project/david/racquet/logs/log4j.log
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
| 屬性 | 說明 |
|---|---|
ConversionPattern | 日誌輸出格式,%d日期、%c類別、%p等級、%m訊息、%n換行 |
MaxFileSize | 單一檔案最大尺寸,超過則滾動 |
MaxBackupIndex | 保留備份檔數量 |
啟動應用伺服器,觀察控制台輸出 ................log4j start 及指定目錄下生成 log4j.log,即代表配置成功。