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

Log4j 不同包使用不同 Appender 導致日志重複輸出的解決

     編輯:程式設計綜合問答

問題場景

log4j.rootLogger=ERROR, appender2
log4j.logger.com.myproject=DEBUG, appender1

結果:自身項目的日志輸出兩遍(分別進入 appender1 和 appender2)。

原因

Log4j 默認遞交性:子 logger 會將日志事件向上傳遞給 rootLogger。配置了 appender1 的 logger 同時也會把事件傳給 rootLogger 的 appender2,導致重複。

解決方法

  1. 關閉遞交性(推薦):
    log4j.logger.com.myproject=DEBUG, appender1
    log4j.additivity.com.myproject=false
  2. 或在 rootLogger 去掉 appender2,改用厭惡性配置:但會影響其他包的 ERROR 輸出。
  3. 使用同一 Appender 但不同閾值:單一 Appender 設置 Threshold=DEBUG,rootLogger 設置 Threshold=ERROR,配合過濾器。

驗證

修改後重啟應用,觀察日志文件/控制台,確認每條日志僅出現一次。

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