Hello!
I have jetty container with preconfigured logback configuration and custom appenders. When I try to load spring boot based WAR into container I receive StackOverflowError.
It looks like org.springframework.boot.logging.logback.LogbackLoggingSystem::FILTER causes recursive class loading.
Exception in thread "main" java.lang.StackOverflowError
at java.io.UnixFileSystem.getBooleanAttributes0(Native Method)
at java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:242)
at java.io.File.exists(File.java:821)
at sun.misc.URLClassPath$FileLoader.getResource(URLClassPath.java:1377)
at sun.misc.URLClassPath$FileLoader.findResource(URLClassPath.java:1344)
at sun.misc.URLClassPath.findResource(URLClassPath.java:225)
at java.net.URLClassLoader$2.run(URLClassLoader.java:572)
at java.net.URLClassLoader$2.run(URLClassLoader.java:570)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findResource(URLClassLoader.java:569)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadAsResource(WebAppClassLoader.java:617)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:534)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:545)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at org.springframework.boot.logging.logback.LogbackLoggingSystem$1.decide(LogbackLoggingSystem.java:88)
at ch.qos.logback.classic.spi.TurboFilterList.getTurboFilterChainDecision(TurboFilterList.java:49)
at ch.qos.logback.classic.LoggerContext.getTurboFilterChainDecision_0_3OrMore(LoggerContext.java:269)
at ch.qos.logback.classic.Logger.callTurboFilters(Logger.java:751)
at ch.qos.logback.classic.Logger.isDebugEnabled(Logger.java:469)
at ch.qos.logback.classic.Logger.isDebugEnabled(Logger.java:465)
at org.eclipse.jetty.util.log.JettyAwareLogger.isDebugEnabled(JettyAwareLogger.java:170)
at org.eclipse.jetty.util.log.Slf4jLog.isDebugEnabled(Slf4jLog.java:120)
at org.eclipse.jetty.webapp.WebAppContext.isServerClass(WebAppContext.java:793)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:545)
[section from at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:545) repeats multiple times]
I reproduced it in https://github.com/palex-fpt/jetty-spring-boot-logback
Used versions: java: 8 spring boot: 2.3.1.RELEASE logback: 1.2.3 jetty: 9.4
Comment From: wilkinsona
Thanks for the report. This is a duplicate of #3571. You can avoid the problem by setting the org.springframework.boot.logging.LoggingSystem
system property to a value of none
.