2017-02-24 571 views
0

的logback 1.1.7

這是一個在 「生產」 運行:堆棧跟蹤從Exception(實際上NoClassDefFoundErrorError):

Exception in thread "main" java.lang.NoClassDefFoundError: ch/qos/logback/core/rolling/helper/TimeBasedArchiveRemover$ArhiveRemoverRunnable 
     at ch.qos.logback.core.rolling.helper.TimeBasedArchiveRemover.cleanAsynchronously(TimeBasedArchiveRemover.java:231) 
     at ch.qos.logback.core.rolling.TimeBasedRollingPolicy.rollover(TimeBasedRollingPolicy.java:178) 
     at ch.qos.logback.core.rolling.RollingFileAppender.attemptRollover(RollingFileAppender.java:204) 
     at ch.qos.logback.core.rolling.RollingFileAppender.rollover(RollingFileAppender.java:183) 
     at ch.qos.logback.core.rolling.RollingFileAppender.subAppend(RollingFileAppender.java:224) 
     at ch.qos.logback.core.OutputStreamAppender.append(OutputStreamAppender.java:100) 

所以我看着來源:該類ArhiveRemoverRunnable確實存在於它應該在l上實例化的.java文件中。 231(與錯誤拼寫)...

然後我打開了可執行的JAR文件(的logback核心-1.1.7.jar):再次,文件TimeBasedArchiveRemover $ ArhiveRemoverRunnable.class存在於包,文件TimeBasedArchiveRemover.class

這個錯誤不會經常發生:很顯然,「滾動」記錄器決定是時候清理目錄了。

任何人都知道爲什麼會發生這種情況?令人費解的是,我發現沒有其他人遇到這種情況的證據......!

回答

0

潛在的解決方法(待定):

我認爲這個問題的答案可能是提取的源文件這個的.jar,編輯違規類,編譯和重新打包爲一個可執行的JAR,然後用而不是下載的jar。爲了做到這一點,我在Eclipse中啓動了一個新的Gradle項目,導入了整個源代碼包等。在Eclipse-Gradle中編譯(構建)OK,沒有投訴「NoClassDef」類型...

但我實際上生產這個可執行的jar有困難。能夠完成是件好事:以某種方式調整和測試下載的依賴項(如果真的有必要)。

電流不那麼令人滿意的解決方法:

其實我已經沒有必要了「基於時間的」歸檔卸妝。根據日誌目錄中所有文件的大小刪除歸檔文件,我感到非常高興。 This answer似乎解決了這個問題。然而,logback是一個非常野獸:我不完全確定:「歸檔刪除」與「翻轉」是一回事嗎?

如果Error再次出現,當然,我將不得不做一個特殊的實用方法來記錄每個LOGGER.xxx命令在try...catch內。

+0

由於沒有人遇到此問題,因此假設它是一個logback bug或一個包裝問題可能是錯誤的。重新包裝不會有幫助。 – Ceki

+0

appender拋出的任何異常都是由相同的appender捕獲的,不應該達到用戶代碼。但是,這不適用於諸如NoClassDefFoundError之類的錯誤,它是java.lang.Error的一個子類。請參閱https://docs.oracle.com/javase/7/docs/api/java/lang/Error.html – Ceki

+0

我得到的同樣的錯誤LogBack 1.1.11由vanilla Spring Frameworks maven安裝,並使用LogBack config文件在https://logback.qos.ch/manual/appenders.html中顯示「示例:使用TimeBasedRollingPolicy的RollingFileAppender的示例配置」 –