亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Log4j StackOverflowError

Log4j StackOverflowError

Cats萌萌 2021-09-15 15:02:19
我的項目一啟動就收到 StackOverFlowError。我見過其他類似的問題,答案是未指定 lg4j.xml 或格式不正確,但這里似乎并非如此。這是代碼:public static void main( String[] args ){    // Configure Logger    DOMConfigurator.configure("config/log4j.xml");    logger.info("Starting StudyImporter");}這是 log4j.xml 文件:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'><appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">    <layout class="org.apache.log4j.PatternLayout">        <param name="ConversionPattern"               value="%d{yyyy-MM-dd HH:mm:ss,SSS} - [%t] %-5p %c %x - %m%n" />    </layout></appender><!-- log all logs to a separate log file every day --><appender name="MAIN_FA" class="org.apache.log4j.DailyRollingFileAppender">    <param name="File" value="C:/project/logs/main.log" />    <param name="datePattern" value="'-'yyyy-MM-dd'.log'" />    <param name="append" value="true" />    <!-- <param name="Threshold" value="INFO" /> -->    <layout class="org.apache.log4j.PatternLayout">        <param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n" />    </layout></appender><logger name="org.importadorestudios">    <level value="INFO" /></logger><root>    <level value="INFO" />    <appender-ref ref="CONSOLE" />    <appender-ref ref="MAIN_FA" /></root>
查看完整描述

2 回答

?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

為了詳細說明我的評論,SLF4J是一個日志外觀。這意味著它提供的只是一些接口和一些幫助類來平滑幕后的事情。要實際使用它,您需要選擇一個日志記錄實現

有許多實現可供選擇,但最值得注意的是:

當您選擇一個實現時,您通常還需要從 SLF4J 到該實現的綁定以及從其他日志 API 到 SLF4J 的橋接。這些網橋的存在是使用 SLF4J 的最大原因,因為這樣您就可以將所有應用程序及其依賴項的登錄路由到一個實現中。甚至支持java.util.logging轉發到 SLF4J。

但關鍵是您不能同時在類路徑上擁有相同實現的綁定和橋接。否則,您會看到這里的內容:堆棧溢出,因為橋正在調用 SLF4J,而 SLF4J 正在調用正在調用橋的綁定。不幸的是,生態系統和陷阱并不總是被廣泛理解,有時人們在分發他們的軟件時會做錯事。例如,已發布的庫不應該引入綁定或橋接。一個庫應該只依賴于 SLF4J API。只有完成的應用程序或庫的測試用例才應該選擇一個實現,從而為其他日志記錄 API 引入綁定(如果需要)和橋接。

這些是綁定:

這些是橋梁:

沒有 logback 橋,因為 logback 的“原生”API 與 SLF4J 重疊。

使用 SLF4J 時,您希望選擇其中一種實現。然后包括以下所有內容:

  • slf4j-api

  • 您選擇的實現的綁定

  • 除了您選擇的實現的橋之外的所有橋

如果您的任何傳遞依賴項嘗試將它們拉入,您希望排除以下所有內容:

  • 您選擇的實現的橋梁

  • 除了您選擇的實現的綁定之外的任何綁定

您可以在MavenGradle 中設置排除項。


查看完整回答
反對 回復 2021-09-15
?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

問題是項目使用的一些庫之間存在沖突。

顯然,有人曾經使用過另一個我們不再使用的登錄庫 (slf4j)。我們從 pom.xml 中刪除了該庫,但它已經下載到我們的計算機中。這導致了產生 StackOverflowError 的沖突。

要解決它,只需刪除不需要的登錄庫。

感謝 talex 指出正確的方向


查看完整回答
反對 回復 2021-09-15
  • 2 回答
  • 0 關注
  • 272 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號