日志异常:java.lang.NoClassDefFoundError: Could not initialize class org.slf4j.impl.StaticLoggerBinder

今天启动开发的项目,碰到了一个日志上的bug:java.lang.NoClassDefFoundError: Could not initialize class org.slf4j.impl.StaticLoggerBinder。刚看到一脸懵。于是到网上查了一下,也有遇到类似问题的。说是要加一些依赖,但是我试了不起作用。后来看到了一篇讲slf4j集成logback和log4j的文章,给我了我灵感,尝试了一下,解决了问题。文章的地址:https://www.jianshu.com/p/9a283ca164ca

一、原因:首先我们要知道slf4j-api是日志的规范,定义了日志的接口。logback和log4j实现了该这些规范,提供了日志的支持。logback和log4j都会用到StaticLoggerBinder去创建Logger。StaticLoggerBinder需要初始化。logback和log4j都会对StaticLoggerBinder初始化。下面是StaticLoggerBinder在logback和log4j中的目录图:

logback

log4j

在StaticLoggerBinder初始化的时候,如果我们项目中同时存在这两个jar包,那么StaticLoggerBinder这个类就会冲突,导致StaticLoggerBinder初始化失败,因此造成了java.lang.NoClassDefFoundError: Could not initialize class org.slf4j.impl.StaticLoggerBinder。

我的项目默认是要使用logback来作为日志的实现的,因此logback-classic存在是很正常的。所以slf4j-log4j12这个jar的存在导致了这个问题。经查slf4j-log4j12存在于我的一个名叫dingtalk-sdk的依赖中。

二:解决

因为我的项目中要使用logback,所以我要把log4j去掉。所以我在dingtalk-sdk这个依赖中加入了exclusion。如下:

现在就可以正常启动项目了。

原文地址:https://www.cnblogs.com/wutianqi/p/9929888.html

时间: 2024-10-28 23:06:47

日志异常:java.lang.NoClassDefFoundError: Could not initialize class org.slf4j.impl.StaticLoggerBinder的相关文章

java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory

java.lang.IllegalAccessError: tried to access field org.slf4j.impl.Static.. java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory 使用hbm2java时,使用hibernate-distribution- 3.3.1

异常:Caused by: java.lang.NoClassDefFoundError: Could not initialize class net.sf.log4jdbc.Properties

参考文章: 使用Log4jdbc-log4j2监听MyBatis中运行的SQL和Connection 使用 log4jdbc格式化输出SQL,maven配置如下: <dependency> <groupId>org.bgee.log4jdbc-log4j2</groupId> <artifactId>log4jdbc-log4j2-jdbc4</artifactId> <version>1.16</version> <

java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.internal.engine.m

javax.validation.Validator.validator.validate(object, groups) bean验证注解报错,异常: java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.internal.engine.messageinterpolation.InterpolationTerm at org.hibernate.validator.messagei

java.lang.NoClassDefFoundError: Could not initialize class org.jfree.chart.JFreeChart

最近在进行利用jfreechart生成图表时发现,项目在本地运行的好好的,一部署到服务器(linux系统)上就不行,报这样的错误: java.lang.NoClassDefFoundError: Could not initialize class org.jfree.chart.JFreeChart,后来经过搜索解决了,详见如下: 1.首先,这与服务器上操作系统是linux系统有关,因为linux系统本身是无图形化界面的,所以在JFreeChart chart = ChartFactory.c

java.lang.NoClassDefFoundError: Could not initialize class xxx 原因

一.问题及原因 程序里有个工具类,主要是调用它的静态方法来发送mq. 调用场景如下: 结果这两天报了个错: java.lang.NoClassDefFoundError: Could not initialize class com.ceiec.rabbitmqservice.utils.MQMessageSender 后来大概看了下,这个类的class文件是存在的.而且报的错也不是class找不到之类的. 翻了下svn记录,发现新增了一个static变量,这个变量的初始化会失败.(因为spri

Kafka + Flink 出现异常 java.lang.NoClassDefFoundError: org/apache/flink/streaming/util/serialization/DeserializationSchema

我在 IDEA 环境中调试 Kafka+Flink 自己编写的例子时 代码编译都是通过的,但是进行Debug调试时,出现如下异常: java.lang.NoClassDefFoundError: org/apache/flink/streaming/util/serialization/DeserializationSchema at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetD

springboot 整合 CXF 版本异常 java.lang.NoClassDefFoundError:ServletRegistrationBean

在使用SpringBoot 项目整合webservice组件 CXF的时候,在启动时,抛出异常如下,查阅资料初步判断为版本问题.升级到高版本后正常启动. cxf 刚开始使用版本  3.1.7 后更新为 3.2.5 . 参考借鉴: spring boot 1.4 版本对应cxf-spring-boot-starter-jaxws   3.1.X  版本 spring boot 1.5 版本对应cxf-spring-boot-starter-jaxws   3.2.X  版本 https://blo

java.lang.NoClassDefFoundError: Could not initialize class org.apache.jasper.el.ELContextImpl

启动项目报 用的tomcat版本是8 解决方案: 换成7 囧~

java.lang.NoClassDefFoundError: Could not initialize class ......

在测试数据字典工具类的时候一直报这个错误,找了好久,原来是SpringContextUtils这个类没有放入到容器中. 但是我在SpringContextUtils上面加了注解的,为什么注解没有扫到呢? 要不怎么说你蠢呢? spring配置文件中的base-package没有扫到这个工具类所在的包,我也是醉了...... <context:component-scan base-package="xxxx"/>