Java学习-051-Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError
错误信息:Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError
场景:
产品服务器采用spring-boot框架开发,zookeeper作为微服务框架,打包完成后发现服务无法启动,tomcat启动错误日志显示如下所示:
日志文本详情:
1 08-Nov-2017 11:32:10.984 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 2 SLF4J: Class path contains multiple SLF4J bindings. 3 SLF4J: Found binding in [jar:file:/shenmajr/shenma-frss-web/webapps/ROOT/WEB-INF/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] 4 SLF4J: Found binding in [jar:file:/shenmajr/shenma-frss-web/webapps/ROOT/WEB-INF/lib/logback-classic-1.1.11.jar!/org/slf4j/impl/StaticLoggerBinder.class] 5 SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 6 SLF4J: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError. 7 SLF4J: See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details. 8 08-Nov-2017 11:32:11.129 SEVERE [localhost-startStop-1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start: 9 org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]] 10 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153) 11 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725) 12 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) 13 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) 14 at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:940) 15 at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1816) 16 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 17 at java.util.concurrent.FutureTask.run(FutureTask.java:266) 18 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 19 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 20 at java.lang.Thread.run(Thread.java:745) 21 Caused by: java.lang.ExceptionInInitializerError 22 at org.slf4j.impl.StaticLoggerBinder.<init>(StaticLoggerBinder.java:72) 23 at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:45) 24 at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150) 25 at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124) 26 at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412) 27 at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357) 28 at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155) 29 at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132) 30 at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:273) 31 at org.springframework.boot.web.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:85) 32 at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:169) 33 at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5292) 34 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) 35 ... 10 more 36 Caused by: java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError. See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details. 37 at org.slf4j.impl.Log4jLoggerFactory.<clinit>(Log4jLoggerFactory.java:54) 38 ... 23 more
解决方法如下所示:
类库冲突是因为tomcat在启动加载类库时,加载类引起的。通过mvn dependency:tree命令查看maven项目工程类库的依赖关系,可以发现如下均有引用slf4j-log4j12的类库,因而在项目工程中将此引用依赖通过exclusions取消即可。
(⊙o⊙)…,上图中红框错位了,大家勿怪哈
实际项目中,可能存在各种各样的冲突,但只要稍用心排查一下冲突的依赖,解决此类问题还是比较容易的。
欢迎 【 留言 || 关注 || 打赏 】 。您的每一份心意都是对我的鼓励和支持!非常感谢!欢迎互加,相互交流学习!
作者:范丰平,本文链接:https://www.cnblogs.com/fengpingfan/p/7807036.html
Copyright @范丰平 版权所有,如需转载请标明本文原始链接出处,严禁商业用途! 我的个人博客链接地址:http://www.cnblogs.com/fengpingfan

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix