我正在使用Eclipse 3.5,我的Tomcat运行时设置为Tomcat 6.0.26。我的Java VM是JDK 1.6.17(Mac OS X)。
当我尝试从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 实现可序列化,所以我不确定循环引用可能在哪里。
有没有人见过这个,知道如何解决这个问题?
答案 0 :(得分:7)
我能够通过将<contextListener ...>
移动到配置文件的最后来解决这个问题(之前,我在文件的开头有了它)。但错误仍然非常奇怪。
答案 1 :(得分:3)
我不确定为什么这样可以解决问题,但是将默认级别设置为INFO会让我失望
.level = INFO
答案 2 :(得分:3)
如果将此代码段插入到您的回溯配置中,问题就解决了:
<!-- LEVEL CAN NOT BE DEBUG -->
<logger name="org.apache" level="INFO"></logger>
答案 3 :(得分:2)
使用Logback时出现相同的错误。
就我而言,问题是我在Logback配置文件中使用了JUL LevelChangePropagator。
所以我只需要删除以下监听器
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
答案 4 :(得分:0)
首先,一些上下文:我个人在 web.xml
中添加侦听器以安装 SLF4JBridgeHandler 以将 java.util.logging
(JUL) 调用桥接到 SLF4J 时看到此消息。一旦我将 JUL 根记录器级别从默认 (INFO
) 增加到 FINE
,以便将所有(几乎所有)消息转发到 SLF4J,我就开始看到这一点。
user2543253 上面的评论确实很有用,这是在类加载时发生的问题。我个人通过在安装 SLF4JBridgeHandler 之前添加一个假的直接 JUL 日志调用(使用 LogRecord
)来解决它,以便及早触发 JUL 类的类加载。所以我的听众现在这样做了:
java.util.logging.Logger rootLogger = LogManager.getLogManager().getLogger("");
rootLogger.log(new LogRecord(Level.ALL, "bridging of java.uil.logging to SLF4J requested"));
SLF4JBridgeHandler.removeHandlersForRootLogger();
rootLogger.setLevel(Level.FINE);
SLF4JBridgeHandler.install();
顺便说一句:这不是严格意义上的 Logback 问题,我在完全不使用 Logback 时遇到了这种情况(我使用的是 Log4j 1.2 绑定)。