環境準備
- 建立 Web 專案(Maven 推薦)。
- 導入 Log4j 2 依賴(
log4j-api、log4j-core、log4j-web)。
配置檔:src/main/resources/log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingFile name="File" fileName="${sys:catalina.base}/logs/app.log"
filePattern="${sys:catalina.base}/logs/app-%d{yyyy-MM-dd}.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
<!-- 業務專用 Logger,單獨檔案 -->
<Logger name="pay-log" level="INFO" additivity="false">
<AppenderRef ref="File"/>
</Logger>
</Loggers>
</Configuration>
JSP 中使用
<%@ page import="org.apache.logging.log4j.LogManager, org.apache.logging.log4j.Logger" %>
<%
Logger logger = LogManager.getLogger("pay-log"); // 或 getLogger(this.getClass())
logger.info("使用者 {} 發起付款,金額 {}", userId, amount);
try { ... } catch (Exception e) { logger.error("付款失敗", e); }
%>
關鍵點
log4j-web 模組會自動在 ServletContext 初始化/銷毀時啟動/關閉 Log4j,**無需手動配置 Listener**。
- Tomcat 部署時,
${sys:catalina.base} 自動解析為 Tomcat 根目錄,日誌寫入 $CATALINA_BASE/logs/。
- 避免在 JSP 大量寫業務邏輯,建議移至 Service/Controller,JSP 僅負責渲染。