承接第一篇(環境安裝與 IDE 配置),本篇詳細記錄如何在專案中整合 Log4j:引入 Jar、建立 Web Module、配置屬性檔、編寫初始化 Servlet、修改 web.xml,實現企業級日誌記錄。
logging-log4j-1.2.9(解壓至任意目錄,如 D:\logging-log4j-1.2.9)。dist/lib/log4j-1.2.9.jar。Trader,目錄 E:\projects\Trader。lib 資料夾,複製 log4j-1.2.9.jar 至其中。WebTrader。WebTrader → Module Directory → WEB-INF,右鍵 New → File,名稱 log4j.properties。# Root logger 配置
log4j.rootCategory=DEBUG, A1
# A1: 檔案輸出 Appender
log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.File=${jboss.server.home.dir}/log/trader.log
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.A1.MaxFileSize=100KB
關鍵點:使用 JBoss 系統屬性 ${jboss.server.home.dir} 動態解析日誌路徑,避免硬編碼;MaxFileSize 啟用滾動(需配合 RollingFileAppender 完整生效,此處為示範)。
Trader.jpx 右鍵 New → Package:com.inspiresky.trader.init。Log4jInit。package com.inspiresky.trader.init;
import org.apache.log4j.PropertyConfigurator;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
public class Log4jInit extends HttpServlet {
public void init() throws ServletException {
String prefix = getServletContext().getRealPath("/");
String file = getInitParameter("log4j-init-file");
if (file != null) {
PropertyConfigurator.configure(prefix + file);
}
}
public void doGet(HttpServletRequest req, HttpServletResponse res) {}
public void destroy() {}
}
在 <display-name>WebTrader</display-name> 之後插入:
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>com.inspiresky.trader.init.Log4jInit</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
load-on-startup>1 確保 Web 應用啟動時最先初始化 Log4j,後續 Servlet/EJB 即可直接使用 Logger.getLogger()。
部署 WebTrader.war 至 JBoss,啟動伺服器,檢查 ${jboss.server.home.dir}/log/trader.log 是否生成並記錄啟動日誌。
Log4j 已就緒,下一篇將使用 EJB Designer 視覺化建立 Session Bean,並在 Bean 中注入 _logger 記錄生命週期事件。