我最近将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应用程序的类路径中。 是什么导致此问题?
参考方案
我只引用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
的干净非常好。
我们最近从Spring Boot 2.1.9升级到2.2.1,这导致我们的测试失败。调查导致结果,默认情况下java.time.Duration类型现在序列化为不同的序列。现在,我们将得到"PT15M",而不是在JSON消息中包含字符串"900.0"。 POJO定义如下所示@JsonProperty(required …
从Spring Boot Application检查Keycloak中的密码是否有效 - java我的用户已经使用有效的令牌登录,但是在一些重要的操作(如确认或取消付费订阅)中,我希望它与其他数据一起发送密码,以便服务器对其进行验证。到目前为止,我的应用程序已将用户存储在数据库中,并且以这种方式进行开发很容易。如何检查用户正确发送的密码?我需要尝试在后端使用用户名和密码登录吗? 参考方案 您的后端应该已经设置为Keycloak客户端,以便它可以传递令牌进…
Spring Boot-使用上下文路径时在根级别的静态内容 - java假设我有一个application.yml内容server: port: 8000 context-path: /rest 因此,将像这样访问所有控制器和htmlhttp://server:8000/rest/controller因此,具有此配置...有可能在不更改其上下文路径的情况下将一些静态html元素添加到其根级别? (我已经将index.html添加…
Java:正则表达式模式匹配器是否有大小限制? - java我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)
Java:线程池如何将线程映射到可运行对象 - java试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …