我正在嘗試Handler在我的 Spring Boot(版本 2.6.3)應用程式中設定自定義日志。結果ClassNotFound如this other question中所述
無法在 Spring Boot Web 應用程式中覆寫 java.util.logging.LogManager:Getting java.lang.ClassNotFoundException on already loaded class
根據對該問題的回答,似乎我需要將我的Handler及其所有依賴項放入可執行 jar 的根目錄中。
在 Maven 構建期間是否有直接的方法來完成此操作,即不是通過在構建后自己提取和重新打包 jar 來實作?
uj5u.com熱心網友回復:
這個問題是 Spring Boot 1.4 引入的 BOOT-INF fat jar 結構導致的。
目前沒有直接的解決方案,而且一些 Spring Boot 維護人員似乎不同意存在問題,因此情況可能需要很長時間才能改變:
問題 #6626:更容易將某些內容打包到 fat jar 的根目錄中
問題 #12659:使用 -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager 啟動可執行戰爭會產生 ClassNotFoundException
解決方法 #1
我必須做兩件事才能讓我的應用程式再次使用自定義日志處理程式作業。1) 使用 Maven Shade 打包日志處理程式及其所有依賴項,以及 2) 使用PropertiesLauncher命令列中的類啟動應用程式,而不是使用java -jar:
java -cp executable.jar:logger-shaded.jar -Dloader.main=mypackage.myapp org.springframework.boot.loader.PropertiesLauncher
、和是我的專案特定的占位符,因此請進行相應調整executable.jar。logger-shaded.jarmypackage.myapp
解決方法 #2
如果處理程式是從配置類中的代碼加載的,或者main()不是在通過加載的檔案中指定的,正如其他問題java.util.logging.config.file的答案的評論中所討論的那樣,那么一切都會按預期作業。我實際上更喜歡這個解決方法#1,因為它會導致更小的部署,但它確實需要撰寫更多的代碼行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/468466.html
