Java 令人困惑的logback bug TimeBasedArchiveRemover$ArhiVeremoverRunable
Logback 1.1.7 这是在“生产”运行期间:来自Java 令人困惑的logback bug TimeBasedArchiveRemover$ArhiVeremoverRunable,java,logging,logback,noclassdeffounderror,Java,Logging,Logback,Noclassdeffounderror,Logback 1.1.7 这是在“生产”运行期间:来自异常的堆栈跟踪(实际上NoClassDefFoundError是一个错误): 因此,我查看了源代码:该类ArhiveRemoverRunnable确实存在于.java文件中,它应该在l上实例化。231(拼写错误) 然后我解包了可执行jar(logback-core-1.1.7.jar):同样,包中存在文件TimeBasedArchiveRemover$arhiveremoverrunable.class,文件TimeBasedArchive
异常的堆栈跟踪
(实际上NoClassDefFoundError
是一个错误
):
因此,我查看了源代码:该类ArhiveRemoverRunnable
确实存在于.java文件中,它应该在l上实例化。231(拼写错误)
然后我解包了可执行jar(logback-core-1.1.7.jar):同样,包中存在文件TimeBasedArchiveRemover$arhiveremoverrunable.class,文件TimeBasedArchiveRemover.class
这个错误不会经常发生:很明显,当“滚动”记录器决定清理目录时,就会发生这个错误
有人知道为什么会这样吗?令人不安的是,我没有发现任何其他人有过这种经历的证据 潜在解决方案(待定): 我认为答案可能是提取这个.jar的源文件,编辑有问题的类,编译并重新打包为可执行的jar,然后使用而不是下载的jar。为了做到这一点,我在Eclipse中启动了一个新的Gradle项目,导入了整个源代码包,等等。使用Gradle在Eclipse中编译(构建)OK,没有“NoClassDef”类型的抱怨 但我在实际制作这个可执行jar时遇到了困难。能够做到这一点是件好事:能够以某种方式调整和测试下载的依赖项(如果真的需要) 当前不太令人满意的解决方法: 事实上,我不需要一个“基于时间的”档案删除程序。我很高兴根据日志目录中所有文件的大小删除了归档文件。似乎解决了这个问题。然而,logback是一个非常可怕的东西:我不完全确定:“档案移除”和“滚动”是一样的吗
当然,如果
错误再次发生,我将不得不使用一种特殊的实用方法来记录记录器.xxx
中的每个命令,并尝试…捕获潜在的解决方法(待定):
我认为答案可能是提取这个.jar的源文件,编辑有问题的类,编译并重新打包为可执行的jar,然后使用而不是下载的jar。为了做到这一点,我在Eclipse中启动了一个新的Gradle项目,导入了整个源代码包,等等。使用Gradle在Eclipse中编译(构建)OK,没有“NoClassDef”类型的抱怨
但我在实际制作这个可执行jar时遇到了困难。能够做到这一点是件好事:能够以某种方式调整和测试下载的依赖项(如果真的需要)
当前不太令人满意的解决方法:
事实上,我不需要一个“基于时间的”档案删除程序。我很高兴根据日志目录中所有文件的大小删除了归档文件。似乎解决了这个问题。然而,logback是一个非常可怕的东西:我不完全确定:“档案移除”和“滚动”是一样的吗
如果错误
再次发生,当然,我必须使用一种特殊的实用方法来记录记录器.xxx
命令中的try…catch
由于没有人遇到此问题,因此认为这是一个回写错误或打包问题的假设可能是错误的。重新打包不会有任何帮助。appender引发的任何异常都会被同一appender捕获,并且不会到达用户代码。但是,这不适用于错误,例如java.lang.Error的子类NoClassDefFoundError。请看,我得到的错误LogBack 1.1.11与vanilla Spring Framework maven安装的错误LogBack 1.1.11相同,并且使用“示例:使用TimeBasedRollingPolicy的RollingFileAppender的示例配置”中所示的LogBack配置文件,因为没有人遇到此问题,认为这是一个logback错误或打包问题的假设可能是错误的。重新打包不会有任何帮助。appender引发的任何异常都会被同一appender捕获,并且不会到达用户代码。但是,这不适用于错误,例如java.lang.Error的子类NoClassDefFoundError。请参阅,我得到的错误LogBack 1.1.11与vanilla Spring Framework maven安装的错误LogBack 1.1.11相同,并使用“示例:使用TimeBasedRollingPolicy的RollingFileAppender的示例配置”中所示的LogBack配置文件
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)