我最近将 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)
...
Run Code Online (Sandbox Code Playgroud)
这只是一小部分,因为这组堆栈跟踪重复了 100 多次,导致StackOverflowError.
我尝试过的调试步骤:
INFO,我不会收到异常。SLF4JBridgeHandler在我的pom.xml.SLF4JBridgeHandler位于我的网络应用程序的类路径中。什么可能导致此问题?
我只是引用官方的 slf4j 文档,
jul-to-slf4j.jar 和 slf4j-jdk14.jar 不能同时存在
的存在
slf4j-jdk14.jar(即 的jul绑定SLF4J)将强制SLF4J将调用委托给jul。另一方面,通过调用“ ”的存在jul-to-slf4j.jar以及安装,会将记录路由到。因此,如果两个 jar 同时存在(并且已安装),调用将被委托给,记录将被路由到 ,从而导致无限循环。SLF4JBridgeHandlerSLF4JBridgeHandler.install()julSLF4JSLF4JBridgeHandlerslf4jjuljulSLF4J
这就是你的情况所发生的情况。
mvn dependency:tree并排除冲突的依赖项。
在我看来,spring-boot擅长管理这样的依赖关系。因此,保持pom.xml干净并减少手动添加的依赖项是有好处的。
| 归档时间: |
|
| 查看次数: |
6657 次 |
| 最近记录: |