首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Log4j 經典配置模板:多輸出目標與分級日誌實戰

     編輯:Java 綜合教學

Log4j.properties 最佳實踐配置詳解

Log4j 1.x 雖已進入維護模式,但大量存量專案仍在使用。本文提供一份生產級配置模板,涵蓋控制台輸出、按天滾動的一般日誌、錯誤日誌分離、UTF-8 編碼與詳細轉換模式,開箱即用。

完整配置文件 (log4j.properties)

# 根 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:平台換行符

生產環境優化建議

  1. 移除 %l:改用 %C{1}.%M(%L) 或完全去除調用位置,大幅提升吞吐。
  2. 異步寫入:包裝 AsyncAppender,將 I/O 操作移出業務線程。
  3. 日誌分級目錄:按模塊/日期分目錄存放,便於歸檔清理。
  4. 遷移至 Log4j 2 / Logback:新專案優先選用 Log4j 2 或 Logback,原生支持異步、更豐富的策略。

Java 代碼中獲取 Logger

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,應用啟動即生效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved