相比 java.util.logging,Log4j 支持外部配置文件動態調整級別、輸出目標、格式,無需重啟應用、無需改代碼,生產環境排查極其方便。
log4j.jarlog4j.properties 放在 classpath 根目錄
import org.apache.log4j.Logger;
public class CheckUserServlet {
private static final Logger logger = Logger.getLogger(CheckUserServlet.class);
public void doSomething() {
logger.info("hello, world"); // 記錄 INFO 級別日志
}
}
# 設置 logger 級別與輸出端
log4j.logger.CheckUserServlet=INFO, A
# 輸出端 A:每天滾動一個文件
log4j.appender.A=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A.File=d:/test.log
# 也可用 ${webapp.root} 表示 Tomcat 根目錄
# 佈局格式
log4j.appender.A.layout=org.apache.log4j.PatternLayout
log4j.appender.A.layout.ConversionPattern=%d %m %n
將級別設置為 OFF 即可完全禁用:
log4j.logger.CheckUserServlet=OFF, A
無需註釋代碼、無需重啟,修改配置文件即時生效(需配置 log4j.refreshInterval 或使用 Log4j 2 的自動重載)。
不同模塊用不同 Logger 名稱,配置多個 appender:
log4j.logger.moduleA=INFO, A
log4j.logger.moduleB=DEBUG, B
log4j.appender.A=...
log4j.appender.B=...
| 組件 | 常用實現類 | 說明 |
|---|---|---|
| Logger 級別 | OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL | 建議用 ERROR, WARN, INFO, DEBUG 四級 |
| Appender | ConsoleAppender, FileAppender, DailyRollingFileAppender, RollingFileAppender, WriterAppender | 輸出目的地 |
| Layout | PatternLayout, HTMLLayout, SimpleLayout, TTCCLayout | 輸出格式 |
%m 消息內容
%p 級別
%r 啟動以來毫秒數
%c Logger 名稱(通常為全類名)
%t 線程名
%n 換行符
%d 日期時間,可指定格式如 %d{yyyy-MM-dd HH:mm:ss,SSS}
%l 調用位置(類.方法:行號)
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n
掌握外部配置,日志管理由「寫死代碼」變為「運維配置」,靈活性提升數個檔次!