java - 令人困惑的日志错误 TimeBasedArchiveRemover$ArhiveRemoverRunnable

标签 java logging logback noclassdeffounderror

日志返回1.1.7

这是在“生产”运行期间:来自Exception的堆栈跟踪(实际上NoClassDefFoundError是一个错误):

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 确实存在于 .java 文件中,它应该在 l 上实例化。 231(拼写错误)...

然后我解压了可执行 jar (logback-core-1.1.7.jar):再次,文件 TimeBasedArchiveRemover$ArhiveRemoverRunnable.class 存在于包中,文件 TimeBasedArchiveRemover.class 也存在。

此错误不会经常发生:显然,当“滚动”记录器决定清理目录时。

有人知道为什么会发生这种情况吗?令人不安的是,我没有发现任何其他人经历过这种情况的证据......!

最佳答案

潜在的解决方法(待定):

我认为这个问题的答案可能是提取这个 .jar 的源文件,编辑有问题的类,编译并重新打包为可执行 jar,然后使用而不是下载的 jar。为了做到这一点,我在 Eclipse 中启动了一个新的 Gradle 项目,导入了整个源代码包等。该东西在 Eclipse-with-Gradle 中编译(构建)正常,没有提示“NoClassDef”类型...

但是我在实际生成这个可执行 jar 时遇到了困难。如果能够实现的话,那就太好了:能够以某种方式调整和测试下载的依赖项(如果确实有必要的话)。

当前不太令人满意的解决方法:

事实上,我不需要“基于时间的”存档删除器。我很高兴根据日志目录中所有文件的大小删除存档。 This answer似乎可以解决这个问题。然而,logback 是一个野兽:我不完全确定:“归档删除”与“滚动”是一样的吗?

如果错误再次发生,当然,我必须创建一个特殊的实用方法来记录try...catch中的每个LOGGER.xxx命令。

关于java - 令人困惑的日志错误 TimeBasedArchiveRemover$ArhiveRemoverRunnable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42446688/

相关文章:

java - 如何使用 Guice 控制对象的生命周期

java - 将 ListCellRenderer 应用于 JList 上的各个单元格

configuration - Log4Net 过滤器 "OR"

java - Tomcat WAR - 配置 Logback 以在路径中使用应用程序名称

java - Selenium captureNetworkTraffic 将值传递给字符串

java - 客户端 服务器 Java 应用程序

java - Google 应用程序灵活的 Java 日志记录不起作用

docker - 如何使用dockerfile修改nginx访问和错误日​​志位置?

spring-boot - 如何在 Grails 4 中设置日志级别

java - 不同级别logback不同文件