日志返回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/