Log4j 完整配置指南:Console 與 DailyRollingFileAppender 實戰詳解
Log4j 是 Java 生態中經典的日誌框架,靈活的配置機制支援多種輸出目的地與滾動策略。本文提供完整的 Java 代碼範例與 log4j.properties 配置詳解,幫助你快速掌握生產級日誌配置。
一、Java 代碼整合範例
public class Demo {
// 取得記錄器,參數為當前類,便於追蹤日誌來源
private static final Logger logger = Logger.getLogger(Demo.class);
public static void main(String[] args) {
getMessage();
}
private static void getMessage() {
// 不同級別的日誌輸出,具體輸出位置與格式由配置檔決定
logger.debug("This is debug message.");
logger.info("This is a info message.");
logger.warn("This is a warn message.");
logger.error("This is a error message.............");
}
}
二、核心配置檔解析 log4j.properties
### 輸出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### 輸出到檔案(每日滾動) ###
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.Append=true
log4j.appender.FILE.DatePattern='.'yyyy-MM-dd
log4j.appender.FILE.File=./logs/parseInfo.log
log4j.appender.FILE.Threshold=INFO
log4j.appender.FILE.Encoding=UTF-8
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} - [%p]-[%l] %m%n
### 根記錄器:級別 INFO,同時輸出到 FILE 與 stdout ###
log4j.rootLogger=info,FILE,stdout
關鍵屬性說明
| 屬性 | 說明 |
DatePattern | 滾動周期,如 '.'yyyy-MM-dd 表示每天生成一個檔案 |
Threshold | 該 Appender 的最低輸出級別,過濾低於此級別的日誌 |
ConversionPattern | 輸出格式,%d時間 %p級別 %c類名 %L行號 %m訊息 %n換行 |
Encoding | 檔案編碼,建議統一 UTF-8 避免中文亂碼 |
三、DatePattern 常用滾動模式對照表
| 模式 | 滾動頻率 | 檔案名範例 |
'.'yyyy-MM | 每月 | parseInfo.log.2024-01 |
'.'yyyy-ww | 每週 | parseInfo.log.2024-03 |
'.'yyyy-MM-dd | 每天 | parseInfo.log.2024-01-15 |
'.'yyyy-MM-dd-a | 每天兩次(AM/PM) | parseInfo.log.2024-01-15-AM |
'.'yyyy-MM-dd-HH | 每小時 | parseInfo.log.2024-01-15-14 |
'.'yyyy-MM-dd-HH-mm | 每分鐘 | parseInfo.log.2024-01-15-14-30 |
四、獨立每日滾動檔案配置範例
# 每天產生一個日誌檔案
log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyFile.File=d:/logs/sbrd
log4j.appender.dailyFile.Append=true
log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout
log4j.appender.dailyFile.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] [%t] (%F:%L) ->%m %n
log4j.appender.dailyFile.Threshold=INFO
log4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd'.log'
最佳實踐:生產環境建議同時啟用 Console(開發除錯)與 DailyRollingFileAppender(持久化),並根據業務量調整 Threshold 級別,避免過量 DEBUG 日誌佔用磁碟。