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

Log4j 完整配置指南:從入門到多輸出實戰

     編輯:Java 程式設計入門

Log4j 是 Java 領域最經典的日誌框架。本文系統梳理配置文件語法、初始化方式、多 Appender 協同輸出及級別控制技巧,助你快速構建生產級日誌體系。

一、配置文件核心語法

Log4j 配置採用鍵值對形式,三大核心組件:

# 1. 根 Logger 配置
log4j.rootLogger = [level], appenderName1, appenderName2, ...

# 2. Appender 配置(輸出目的地)
log4j.appender.appenderName = fully.qualified.class.name
log4j.appender.appenderName.option1 = value1
...

# 3. Layout 配置(輸出格式)
log4j.appender.appenderName.layout = fully.qualified.class.name
log4j.appender.appenderName.layout.option1 = value1
...

日誌級別(由高到低)

級別數值適用場景
FATAL0導致應用崩潰的嚴重錯誤
ERROR3業務流程中斷、異常捕獲
WARN4潛在問題、接近閾值預警
INFO6關鍵業務節點、狀態變更
DEBUG7開發調試、詳細執行軌跡

常用 Appender 類型

  • ConsoleAppender:控制台輸出
  • FileAppender:固定文件輸出
  • DailyRollingFileAppender:按天滾動生成文件
  • RollingFileAppender:按文件大小滾動
  • WriterAppender:流式輸出至任意目標

常用 Layout 類型

  • PatternLayout:靈活模式(推薦)
  • HTMLLayout:HTML 表格格式
  • SimpleLayout:級別+信息
  • TTCCLayout:時間、線程、類別等詳細信息

PatternLayout 常用佔位符

符號含義
%m代碼中指定的消息
%p優先級
%r啟動到輸出耗時(毫秒)
%c類目全名
%t線程名
%n換行符
%d時間(可指定格式,如 %d{yyyy-MM-dd HH:mm:ss,SSS})
%l發生位置(類.方法:行號)

二、Logger 初始化四種方式

  1. BasicConfigurator.configure():快速啟用控制台輸出,格式固定,級別 DEBUG
  2. PropertyConfigurator.configure(args[x]):命令行參數指定配置文件
  3. 環境變量指定配置文件,利用默認初始化流程
  4. 應用服務器集成:通過特殊 Servlet 載入配置

三、多 Appender 協同:分級輸出到不同文件

實戰場景:普通日志輸出到 log.log,異常日志單獨輸出到 error.log。

### 根 Logger 掛載三個 Appender
log4j.rootLogger = debug, stdout, D, E

### 控制台輸出
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

### 普通日誌文件(DEBUG 及以上)
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] %m%n

### 異常日誌文件(ERROR 及以上)
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] %m%n

四、代碼調用示例

public class TestLog4j {
    public static void main(String[] args) {
        PropertyConfigurator.configure("D:/Code/conf/log4j.properties");
        Logger logger = Logger.getLogger(TestLog4j.class);
        logger.debug("debug message");
        logger.error("error message");
    }
}

運行後,debug 同時出現在控制台與 log.log,error 額外出現在 error.log,實現分級存儲。

五、最佳實踐建議

  • 生產環境建議根級別設為 INFO 或 WARN,避免 DEBUG 級別日誌佔磁盤
  • 關鍵業務鏈路務必打印 traceId 便於鏈路追蹤
  • 異常堆棧信息完整輸出,勿只記錄錯誤消息
  • 定期清理/歸檔歷史日誌,防止磁盤寫滿
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved