Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 令人困惑的logback bug TimeBasedArchiveRemover$ArhiVeremoverRunable_Java_Logging_Logback_Noclassdeffounderror - Fatal编程技术网

Java 令人困惑的logback bug TimeBasedArchiveRemover$ArhiVeremoverRunable

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

Logback 1.1.7

这是在“生产”运行期间:来自
异常的堆栈跟踪
(实际上
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)