tomcat - 类循环错误 : java/util/logging/LogRecord running Gradle webapp with JavaMelody and Tomcat plugin

标签 tomcat gradle slf4j tomcat-juli

当我尝试使用 Gradle Tomcat plugin 启动我的应用程序时,我得到了下面的堆栈跟踪的嵌入式容器。

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':tomcatRun'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
...
Caused by: java.lang.ClassCircularityError: java/util/logging/LogRecord
    at net.bull.javamelody.LoggingHandler.publish(LoggingHandler.java:109)
    at org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:183)
    at org.apache.juli.logging.DirectJDKLog.debug(DirectJDKLog.java:106)
    at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:369)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153)
    at org.apache.catalina.startup.Tomcat.start(Tomcat.java:341)
    at org.apache.catalina.startup.Tomcat$start.call(Unknown Source)
    at org.gradle.api.plugins.tomcat.embedded.BaseTomcatServerImpl.start(BaseTomcatServerImpl.groovy:37)
...

当我使用外部 Tomcat 时不会发生这种情况,所以我希望它与 Gradle 的类路径和 Gradle 的内置依赖项有关(我什至不知道如何找出它们是什么)。我查了一下,人们似乎有 similar problems以某种方式与 SLF4J 和/或 Logback 有关,我的项目都没有使用。我尝试使用 SLF4J legacy bridges 来解决它但无济于事——可能是因为我在我的 build.gradle 中声明了它们,但那时已经太晚了(Gradle 本身已经引入/配置了 SLF4J)。

理论上也可以禁用 JULI 并让 Tomcat 登录到 log4j,这似乎有机会解决问题,但是 the instructions所有这些都与手动替换 $CATALINA_HOME/bin$CATALINA_HOME/lib 中的 JAR 有关,我不知道如何在 Gradle 中实现这一点上下文。

有什么想法吗?

最佳答案

事实证明,最简单的解决方法是阻止 Tomcat 使用 java.util.logging 并让它使用 Log4J。

在我的 build.gradle 中:

  tomcat "org.apache.tomcat.embed:tomcat-embed-logging-log4j:${tomcatVersion}"
  // tomcat "org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}"

关于tomcat - 类循环错误 : java/util/logging/LogRecord running Gradle webapp with JavaMelody and Tomcat plugin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23963049/

相关文章:

internet-explorer - Internet Explorer HTTPS 请求中止?

java - Tomcat 的 Documentum 6.5 SP3 错误

java - 如何在 Tomcat 中获取加载的应用程序类列表?

Android 调试构建失败, "Stackoverflow Error"post gradle 升级到 2.3.0

java - WebSphere App Server 中的 SLF4J 消息格式

tomcat - Tomcat GC日志语句解释

android - 将 GitHub Android 库发布到 Maven Central

android - Proguard 重复 Zip 条目

eclipse - Hibernate-annotations 3.4.0.GA 和 slf4j?

scala - 为什么 logback 以不同的顺序加载配置并忽略系统属性(SBT)?