Java 从Eclipse运行Tomcat 6时出现的ClassCircularityError
我使用的是Eclipse3.5,我的Tomcat运行时设置为Tomcat6.0.26。我的JavaVM是JDK1.6.17(MacOSX) 当我尝试从Eclipse Java EE透视图运行web应用程序时,我在控制台中不断看到以下错误: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
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