日志异常: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。如下:
现在就可以正常启动项目了。
最新文章
- 即时通讯 TCP UDP
- 【译】用jQuery 处理XML--浏览器中的XML与JavaScript
- Remote Displayer for Android V1.2
- C#函数、参数数组(例子)★
- 简单的聊天程序,主要用到的是Socket
- hibernate 打印sql和参数的配置
- php修改排序,上移下移
- wcf教程
- JVM笔记5:Class文件结构
- Tomcat绑定多个IP地址 多域名绑定
- 【5】namenode启动过程
- ACM Least Common Multiple
- 数据分析三剑客之pandas
- Vue学习三:v-on:click命令及v-html命令学习
- Linux - 更改软件源
- django之创建第9个项目-管理后台admin
- 关于display:grid layout
- 60. vbe6ext.olb 不能被加载
- 隐藏基于Dialog的MFC的主窗体
- mydumper安装
热门文章
- 在GUI程序中使用控制台的两种方法
- NodeJS学习笔记六
- android中代码操作外部SD卡出错:W/System.err(1595): Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
- VS2010/MFC编程入门之九(对话框:为控件添加消息处理函数)
- asp.net 获取mp3 播放时长
- unhandledException详细介绍
- 【转载】package-info
- 如何在 OSX 中使用多个JDK版本
- System.data.sqlite安装
- BZOJ 2226 【SPOJ 5971】 LCMSum