2 回答

TA貢獻1793條經驗 獲得超6個贊
為了詳細說明我的評論,SLF4J是一個日志外觀。這意味著它提供的只是一些接口和一些幫助類來平滑幕后的事情。要實際使用它,您需要選擇一個日志記錄實現。
有許多實現可供選擇,但最值得注意的是:
當您選擇一個實現時,您通常還需要從 SLF4J 到該實現的綁定以及從其他日志 API 到 SLF4J 的橋接。這些網橋的存在是使用 SLF4J 的最大原因,因為這樣您就可以將所有應用程序及其依賴項的登錄路由到一個實現中。甚至支持java.util.logging
轉發到 SLF4J。
但關鍵是您不能同時在類路徑上擁有相同實現的綁定和橋接。否則,您會看到這里的內容:堆棧溢出,因為橋正在調用 SLF4J,而 SLF4J 正在調用正在調用橋的綁定。不幸的是,生態系統和陷阱并不總是被廣泛理解,有時人們在分發他們的軟件時會做錯事。例如,已發布的庫不應該引入綁定或橋接。一個庫應該只依賴于 SLF4J API。只有完成的應用程序或庫的測試用例才應該選擇一個實現,從而為其他日志記錄 API 引入綁定(如果需要)和橋接。
這些是綁定:
slf4j-jcl使用 commons-logging 作為實現
slf4j-log4j12使用 Log4j 1.2.x 作為實現
log4j-slf4j-impl使用 Log4j 2.x 作為實現
logback-classic使用 Logback 作為實現
slf4j-simple是 SLF4J 的一個非?;镜膶崿F
這些是橋梁:
jcl-over-slf4j將 commons-logging API 橋接到 SLF4J
log4j-over-slf4j將 Log4j 1.2.x API 橋接到 SLF4J
log4j-to-slf4j將 Log4j 2.x API 橋接到 SLF4J
jul-to-slf4j連接
java.util.logging
到 SLF4J
沒有 logback 橋,因為 logback 的“原生”API 與 SLF4J 重疊。
使用 SLF4J 時,您希望選擇其中一種實現。然后包括以下所有內容:
您選擇的實現的綁定
除了您選擇的實現的橋之外的所有橋
如果您的任何傳遞依賴項嘗試將它們拉入,您希望排除以下所有內容:
您選擇的實現的橋梁
除了您選擇的實現的綁定之外的任何綁定

TA貢獻1788條經驗 獲得超4個贊
問題是項目使用的一些庫之間存在沖突。
顯然,有人曾經使用過另一個我們不再使用的登錄庫 (slf4j)。我們從 pom.xml 中刪除了該庫,但它已經下載到我們的計算機中。這導致了產生 StackOverflowError 的沖突。
要解決它,只需刪除不需要的登錄庫。
感謝 talex 指出正確的方向
添加回答
舉報