我最近将Spring Boot应用程序从1.5.10升级到了2.0.3,现在正面临这个问题:将logging.level.root=DEBUG
添加到application.properties
时,出现以下异常:
log4j:WARN No appenders could be found for logger (org.springframework.web.context.support.StandardServletEnvironment).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "background-preinit" java.lang.StackOverflowError
at org.slf4j.bridge.SLF4JBridgeHandler.getSLF4JLogger(SLF4JBridgeHandler.java:198)
at org.slf4j.bridge.SLF4JBridgeHandler.publish(SLF4JBridgeHandler.java:293)
at java.util.logging.Logger.log(Logger.java:738)
at java.util.logging.Logger.doLog(Logger.java:765)
at java.util.logging.Logger.logp(Logger.java:931)
at org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:180)
at org.apache.juli.logging.DirectJDKLog.debug(DirectJDKLog.java:103)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1154)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
at org.slf4j.bridge.SLF4JBridgeHandler.getSLF4JLogger(SLF4JBridgeHandler.java:198)
at org.slf4j.bridge.SLF4JBridgeHandler.publish(SLF4JBridgeHandler.java:293)
at java.util.logging.Logger.log(Logger.java:738)
at java.util.logging.Logger.doLog(Logger.java:765)
at java.util.logging.Logger.logp(Logger.java:931)
at org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:180)
at org.apache.juli.logging.DirectJDKLog.debug(DirectJDKLog.java:103)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1154)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
at org.slf4j.bridge.SLF4JBridgeHandler.getSLF4JLogger(SLF4JBridgeHandler.java:198)
at org.slf4j.bridge.SLF4JBridgeHandler.publish(SLF4JBridgeHandler.java:293)
...
这只是一小部分,因为这组堆栈跟踪重复了100多次,从而导致StackOverflowError
。
我尝试过的调试步骤:
INFO
,则不会出现异常。 SLF4JBridgeHandler
中为pom.xml
添加了特定的依存关系。SLF4JBridgeHandler
在我的Web应用程序的类路径中。什么可能导致此问题?
答案 0 :(得分:3)
我只引用official slf4j documentation,
jul-to-slf4j.jar和slf4j-jdk14.jar不能同时出现
存在
slf4j-jdk14.jar
,即jul
的绑定SLF4J
,将强制将SLF4J
的呼叫委派给jul
。在 另一方面,jul-to-slf4j.jar
的存在以及安装 通过调用“SLF4JBridgeHandler
”获得SLF4JBridgeHandler.install()
中的 会将jul
条记录路由到SLF4J
。因此,如果两个罐子都存在 同时(并安装了SLF4JBridgeHandler
),slf4j
个调用 将被委派到jul
,并且jul
记录将被路由到SLF4J
,导致无休止的循环。
您的案件正在发生什么。
mvn dependency:tree
并排除冲突的依赖关系。
我认为spring-boot
擅长管理此类依赖项。因此,保持pom.xml
干净且减少手动添加的依赖关系是很好的。