log4j-1.2.8.jar 加入類別路徑public class Log4JInit extends HttpServlet {
public void init() throws ServletException {
String prefix = getServletContext().getRealPath("/");
String file = getServletConfig().getInitParameter("log4j-config-file");
if (file != null) {
PropertyConfigurator.configure(prefix + file);
}
}
// doGet/doPost 空實作
}
<servlet>
<servlet-name>log4jinit</servlet-name>
<servlet-class>com.iss.common.util.Log4JInit</servlet-class>
<init-param>
<param-name>log4j-config-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,確保最早初始化。log4j.properties 放置於 WEB-INF 目錄。
# 根記錄器:DEBUG 以上輸出至控制台
log4j.rootLogger=debug, stdout
# 分級記錄器
log4j.logger.debug=debug, R
log4j.logger.info=info, s
log4j.logger.error=error, k
# 控制台輸出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=(%F:%L) - %m%d%n
# DEBUG 級別:每日滾動檔案
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=c:/webapps/debugInfo.log
log4j.appender.R.DatePattern='.'yyyy-MM-dd'.txt'
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d [%F:%L] - %m \r\n
# INFO 級別:固定大小滾動(100KB,保留 1 個備份)
log4j.appender.s=org.apache.log4j.RollingFileAppender
log4j.appender.s.File=c:/webapps/info.log
log4j.appender.s.MaxFileSize=100KB
log4j.appender.s.MaxBackupIndex=1
log4j.appender.s.layout=org.apache.log4j.PatternLayout
log4j.appender.s.layout.ConversionPattern=%p %t %c - %m%d%n
# ERROR 級別:每日滾動
log4j.appender.k=org.apache.log4j.DailyRollingFileAppender
log4j.appender.k.File=C:/Program Files/Apache Tomcat 4.0/webapps/PSA/log/error_8080.log
log4j.appender.k.DatePattern='.'yyyy-MM-dd'.txt'
log4j.appender.k.layout=org.apache.log4j.PatternLayout
log4j.appender.k.layout.ConversionPattern=%d [%F:%L] - %m \r\n
// 類別成員
private static final Logger debugLog = Logger.getLogger("debug");
private static final Logger infoLog = Logger.getLogger("info");
private static final Logger errorLog = Logger.getLogger("error");
// 使用
debugLog.debug("除錯訊息"); // 寫入 debugInfo.log
infoLog.info("資訊訊息"); // 寫入 info.log
errorLog.error("錯誤訊息"); // 寫入 error_8080.log
debug、info、error)對應 log4j.logger.xxx 設定ConsoleAppender、DailyRollingFileAppender(按日期)、RollingFileAppender(按大小)ConversionPattern 格式化輸出:%d 日期、%F 檔案、%L 行號、%m 訊息、%p 級別、%t 執行緒、%c 類別.properties 集中管理,利於維護Log4j 透過 Servlet 初始化、分級記錄器與多樣 Appender,實現靈活的日誌管理。正確配置 rootLogger、分級 Logger 與 Appender,即可依級別輸出至控制台、每日滾動檔案或固定大小檔案,滿足開發除錯與生產監控需求。