Log4j 作為 Java 領域最經典的日誌框架,其架構建立在三大核心組件之上:日誌優先級(Level)、輸出目的地(Appender) 以及 輸出格式(Layout)。這三者協同工作,構成了靈活可控的日誌系統。
優先級從高到低分為 ERROR、WARN、INFO、DEBUG 四個標準級別,分別對應不同嚴重程度的訊息:
設定根 Logger 的級別時,只會輸出 大於或等於該級別 的日誌。例如設定為 INFO,則 DEBUG 級別的日誌將被過濾。
Appender 決定日誌流向何處,常見實現類包括:
| Appender 類別 | 用途 |
|---|---|
| org.apache.log4j.ConsoleAppender | 控制台輸出 |
| org.apache.log4j.FileAppender | 固定檔案輸出 |
| org.apache.log4j.DailyRollingFileAppender | 按日期滾動產生新檔案 |
| org.apache.log4j.RollingFileAppender | 檔案達指定大小滾動 |
| org.apache.log4j.WriterAppender | 輸出至任意流 |
Layout 控制日誌顯示內容,主流選擇為 PatternLayout,支援豐富的佔位符:
%r:啟動以來毫秒數%t:執行緒名稱%p:優先級%c:類別全名%m%n:訊息內容與換行典型 log4j.properties 範例:
# 根 Logger 設定:級別 INFO,雙輸出目的地 A1(控制台) A2(滾動檔案)
log4j.rootLogger=INFO, A1, A2
# A1:控制台輸出
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
# A2:滾動檔案輸出
log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.File=example.log
log4j.appender.A2.MaxFileSize=100KB
log4j.appender.A2.MaxBackupIndex=1
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%p %t %c - %m%n
關鍵提醒:log4j.appender 必須全小寫,否則配置不生效。
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.Logger;
import org.apache.log4j.Level;
private static final Logger logger = Logger.getLogger(YourClass.class);
PropertyConfigurator.configure("path/to/log4j.properties");
logger.debug("除錯資訊");
logger.info("業務流程資訊");
logger.warn("警告訊息");
logger.error("錯誤訊息", exception); // 建議帶上異常堆疊
INFO 或 WARN 級別,避免 DEBUG 產生過大日誌檔案RollingFileAppender 並設定 MaxBackupIndex 防止磁碟佔滿logger.error(msg, e) 保留完整堆疊追蹤