Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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 从Eclipse运行Tomcat 6时出现的ClassCircularityError_Java_Tomcat - Fatal编程技术网

Java 从Eclipse运行Tomcat 6时出现的ClassCircularityError

Java 从Eclipse运行Tomcat 6时出现的ClassCircularityError,java,tomcat,Java,Tomcat,我使用的是Eclipse3.5,我的Tomcat运行时设置为Tomcat6.0.26。我的JavaVM是JDK1.6.17(MacOSX) 当我尝试从Eclipse Java EE透视图运行web应用程序时,我在控制台中不断看到以下错误: Caused by: java.lang.ClassCircularityError: java/util/logging/LogRecord at com.adsafe.util.SimpleFormatter.format(SimpleFormatter

我使用的是Eclipse3.5,我的Tomcat运行时设置为Tomcat6.0.26。我的JavaVM是JDK1.6.17(MacOSX)

当我尝试从Eclipse Java EE透视图运行web应用程序时,我在控制台中不断看到以下错误:

Caused by: java.lang.ClassCircularityError: java/util/logging/LogRecord
 at com.adsafe.util.SimpleFormatter.format(SimpleFormatter.java:11)
 at java.util.logging.StreamHandler.publish(StreamHandler.java:179)
 at java.util.logging.ConsoleHandler.publish(ConsoleHandler.java:88)
 at java.util.logging.Logger.log(Logger.java:458)
 at java.util.logging.Logger.doLog(Logger.java:480)
 at java.util.logging.Logger.logp(Logger.java:596)
 at org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:165)
 at org.apache.juli.logging.DirectJDKLog.info(DirectJDKLog.java:115)
 at org.apache.catalina.core.ApplicationContext.log(ApplicationContext.java:644)
 at org.apache.catalina.core.ApplicationContextFacade.log(ApplicationContextFacade.java:251)
 at org.apache.catalina.core.StandardWrapper.unavailable(StandardWrapper.java:1327)
 at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1130)
 at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993)
 at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4187)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4496)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
 at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
 at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
 at org.apache.catalina.core.StandardService.start(StandardService.java:519)
 at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
 ... 6 more
java/util/logging/LogRecord实现了Serializable,因此我不确定循环引用可能潜入何处


以前有没有人见过这个问题,知道如何解决这个问题

我不知道为什么这样解决了这个问题,但将默认级别设置为INFO让我摆脱了这个问题


中的.level=INFO

在使用Logback时出现相同错误

在我的例子中,问题是我在我的Logback配置文件中使用了JUL-levelchangeprogator

所以我只需要删除下面的侦听器

<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
    <resetJUL>true</resetJUL>
</contextListener>

真的

我可以通过将
移动到配置文件的最末尾(以前,我在文件的开头有它)来避免这个问题。但是,错误仍然很奇怪。

如果将此代码段插入到您的logback配置中,问题就解决了:

<!-- LEVEL CAN NOT BE DEBUG -->
<logger name="org.apache" level="INFO"></logger>

首先,有一点背景:我个人在我的
web.xml
中添加一个侦听器来安装对SLF4J的to桥
java.util.logging
(JUL)调用时看到了这条消息。当我将JUL root logger级别从默认(
INFO
)增加到
FINE
,以便将所有(好的,几乎所有)消息转发到SLF4J时,我就开始看到了这一点

上面的user2543253注释确实有用,这是类加载时出现的问题。我个人通过在安装SLF4JBridgeHandler之前添加一个假的直接JUL日志调用(使用
LogRecord
)来解决这个问题,以便尽早触发JUL类的类加载。所以我的听众现在做了:

java.util.logging.Logger rootLogger=LogManager.getLogManager().getLogger(“”);
log(新的日志记录(Level.ALL,“请求将java.uil.logging桥接到SLF4J”);
SLF4JBridgeHandler.removeHandlersFrrootLogger();
rootLogger.setLevel(Level.FINE);
SLF4JBridgeHandler.install();

顺便说一句:这不是严格意义上的Logback问题,我在根本不使用Logback的情况下遇到了这个问题(我使用的是log4j1.2绑定)。

这个Adsafe?这可能是官方错误:Logback创建者似乎认为这是Tomcat的问题。删除
LevelChangePropagator
可能会导致性能问题:@BradCupit I也有此错误(出于性能原因,不想停止使用LevelChangePropagator)。虽然我觉得很难相信,但Meriton的解决方案(如下)对我有效,并允许我保留它。这是因为当Webapp类加载器加载logger类时会出现循环错误。这样,它将向日志输出一条调试消息。为此,需要加载记录器类。这样做。。。你看这是怎么回事。将日志级别设置为INFO将禁止调试日志条目->避免循环。谢谢。这很有效。您甚至只能为
org.apache.catalina