Java 调试日志记录导致Spring Boot 2.0.3.0版本中出现StackOverflowerError

Java 调试日志记录导致Spring Boot 2.0.3.0版本中出现StackOverflowerError,java,spring-boot,Java,Spring Boot,我最近将我的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 Pleas

我最近将我的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次,导致
stackoverflowerrror

我尝试过的调试步骤:

  • 如果我将日志记录级别更改为其他级别,如
    INFO
    ,则不会出现异常
  • 我在我的
    pom.xml
    中为
    SLF4JBridgeHandler
    添加了一个特定的依赖项
  • 我已确保
    SLF4JBridgeHandler
    位于我的web应用程序的类路径上
是什么导致了这个问题

我将引用

jul-to-slf4j.jar和slf4j-jdk14.jar不能同时出现

存在的
slf4j-jdk14.jar
,即
SLF4J
,将强制将
SLF4J
调用委派给
jul
。上 另一方面,存在
jul-to-slf4j.jar
,以及安装 通过调用“
SLF4JBridgeHandler.install()
”来执行的 将
jul
记录路由到
SLF4J
。因此,如果两个jar都存在 同时(并且安装了
SLF4JBridgeHandler
slf4j
调用 将委托给
jul
jul
记录将发送给
SLF4J
,导致无休止的循环

你的案子就是这样的。
尝试执行
mvn依赖项:树
,并排除冲突的依赖项


在我看来,
springboot
善于管理这样的依赖关系。因此,最好保持
pom.xml
干净,减少手动添加的依赖项。

slf4j的版本是什么?您是否在pom.xml中手动配置它们?如果是,你能给我们看一下pom.xml吗?添加
logging.level.org.apache.juli.logging.DirectJDKLog=INFO
@RajaAnbazhagan
slf4j api
jar的版本是
1.7.25
,它是从我的
spring-security saml dsl-core
依赖项导入的。看起来你的slf4j正试图将日志重定向到java.util.logging和它再次将日志重定向到slf4j,导致无限循环。我想我在文件的某个地方读到了这个。。。Wait@Andreas我添加了它,得到了相同的异常,没有创建新的输出。这很有效!在我的
pom.xml
中依赖于
jul-to-slf4j.jar
,这导致了问题。删除了依赖项,运行了mvn clean package,很好!另外,你能提供一个链接到你从中摘录的完整文档吗?