Log4j 1.x 雖已進入維護模式,但大量存量專案仍在使用。本文提供一份生產級配置模板,涵蓋控制台輸出、按天滾動的一般日誌、錯誤日誌分離、UTF-8 編碼與詳細轉換模式,開箱即用。
# 根 Logger:DEBUG 級別,掛載三個 Appender
log4j.rootCategory=DEBUG, R, D, stdout
# ========== 控制台輸出 ==========
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.encoding=UTF-8
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %-5p ~ %m%n
# ========== 一般日誌:每日滾動 ==========
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.encoding=UTF-8
log4j.appender.R.File=D:/Users/workspace/log/log.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.Threshold=DEBUG
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p ~ %m ~ %l ~ %c ~ %r%n
# ========== 錯誤日誌:單獨文件,僅 ERROR 級別 ==========
log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.encoding=UTF-8
log4j.appender.D.File=D:/Users/workspace/log/error.log
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.Threshold=ERROR
log4j.appender.D.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} %-5p ~ %m ~ %l ~ %c ~ %r%n
| 配置項 | 說明 |
|---|---|
rootCategory | 根日誌級別 DEBUG,掛載 stdout、R、D 三個 Appender |
ConsoleAppender | 開發調試用,輸出到標準流,模式簡潔:時間、級別、訊息 |
DailyRollingFileAppender (R) | 全量日誌,按天滾動,包含精確毫秒、行號(%l)、類名(%c)、相對時間(%r) |
DailyRollingFileAppender (D) | 錯誤日誌專用,Threshold=ERROR 過濾非錯誤級別,便於快速定位故障 |
encoding=UTF-8 | 統一編碼,避免中文亂碼 |
File 路徑 | 生產環境建議改為 ${catalina.base}/logs/ 或環境變量路徑 |
%d{pattern}:日期時間,支持 ISO8601、ABSOLUTE 或自定義 yyyy-MM-dd HH:mm:ss,SSS%-5p:日誌級別左對齊佔 5 字符(DEBUG、ERROR、INFO...)%m:用戶輸出的日誌訊息%l:調用位置(類.方法:行號),性能較差,生產環境慎用%c:Logger 名稱(通常為全限定類名)%r:應用啟動到輸出該日誌的毫秒數%n:平台換行符%C{1}.%M(%L) 或完全去除調用位置,大幅提升吞吐。AsyncAppender,將 I/O 操作移出業務線程。import org.apache.log4j.Logger;
public class DemoService {
private static final Logger LOG = Logger.getLogger(DemoService.class);
public void doSomething() {
LOG.debug("調試信息");
LOG.info("業務流程節點");
LOG.error("異常捕獲", new RuntimeException("示例異常"));
}
}
將配置文件置於 src/main/resources/log4j.properties,Maven 打包自動進入 classpath,應用啟動即生效。