基本描述

slf4j 是日志的api 门面模式,引入slf4j-api就行,但是打印不出日志的,因为没有具体的实现类。

logback实现包 :

       <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.6</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.2.6</version></dependency>

log4j 实现包 :


<dependency>  <groupId>org.slf4j</groupId>  <artifactId>slf4j-log4j12</artifactId>  <version>1.7.2</version>
</dependency>

slf4j是怎么找到实现类的

  • 通过StaticLoggerBinder 来获取ILoggerFactory
  • StaticLoggerBinder类是sf4j-api没有的,需要实现类的jar包提供,并且包名是org.slf4j.impl
  • 如果没有实现包,就找不到StaticLoggerBinder类了,就报slf4j Failed to load class “org.slf4j.impl.StaticLoggerBinder”
  • 如果有多个实现包,pom依赖谁在前面,就先找到谁的。

相关源码

Logger logger = LoggerFactory.getLogger("aa");
// 获取Logger
public static Logger getLogger(String name) {ILoggerFactory iLoggerFactory = getILoggerFactory();return iLoggerFactory.getLogger(name);}//获取工厂类public static ILoggerFactory getILoggerFactory() {if (INITIALIZATION_STATE == UNINITIALIZED) {synchronized (LoggerFactory.class) {if (INITIALIZATION_STATE == UNINITIALIZED) {INITIALIZATION_STATE = ONGOING_INITIALIZATION;//初始化performInitialization();}}}switch (INITIALIZATION_STATE) {case SUCCESSFUL_INITIALIZATION:return StaticLoggerBinder.getSingleton().getLoggerFactory();case NOP_FALLBACK_INITIALIZATION:return NOP_FALLBACK_FACTORY;case FAILED_INITIALIZATION:throw new IllegalStateException(UNSUCCESSFUL_INIT_MSG);case ONGOING_INITIALIZATION:// support re-entrant behavior.// See also http://jira.qos.ch/browse/SLF4J-97//默认的工厂,实际上是走不到这逻辑return SUBST_FACTORY;}throw new IllegalStateException("Unreachable code");}//平台初始化
private final static void performInitialization() {bind();if (INITIALIZATION_STATE == SUCCESSFUL_INITIALIZATION) {versionSanityCheck();}}//绑定具体的slf4j的实现
private final static void bind() {try {Set<URL> staticLoggerBinderPathSet = null;// skip check under android, see also// http://jira.qos.ch/browse/SLF4J-328if (!isAndroid()) {staticLoggerBinderPathSet = findPossibleStaticLoggerBinderPathSet();reportMultipleBindingAmbiguity(staticLoggerBinderPathSet);}// the next line does the binding//StaticLoggerBinder类是sf4j-api没有的,需要实现类的jar包提供,并且包名是org.slf4j.implStaticLoggerBinder.getSingleton();INITIALIZATION_STATE = SUCCESSFUL_INITIALIZATION;reportActualBinding(staticLoggerBinderPathSet);fixSubstituteLoggers();replayEvents();// release all resources in SUBST_FACTORYSUBST_FACTORY.clear();} catch (NoClassDefFoundError ncde) {String msg = ncde.getMessage();if (messageContainsOrgSlf4jImplStaticLoggerBinder(msg)) {INITIALIZATION_STATE = NOP_FALLBACK_INITIALIZATION;Util.report("Failed to load class \"org.slf4j.impl.StaticLoggerBinder\".");Util.report("Defaulting to no-operation (NOP) logger implementation");Util.report("See " + NO_STATICLOGGERBINDER_URL + " for further details.");} else {failedBinding(ncde);throw ncde;}} catch (java.lang.NoSuchMethodError nsme) {String msg = nsme.getMessage();if (msg != null && msg.contains("org.slf4j.impl.StaticLoggerBinder.getSingleton()")) {INITIALIZATION_STATE = FAILED_INITIALIZATION;Util.report("slf4j-api 1.6.x (or later) is incompatible with this binding.");Util.report("Your binding is version 1.5.5 or earlier.");Util.report("Upgrade your binding to version 1.6.x.");}throw nsme;} catch (Exception e) {failedBinding(e);throw new IllegalStateException("Unexpected initialization failure", e);}}

slf4j Failed to load class “org.slf4j.impl.StaticLoggerBinder“ 错误 源码解析相关推荐

  1. SLF4J: Failed to load class org.slf4j.impl.StaticLoggerBinder.

    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". Spring Cloud 启动提示: SLF4J: ...

  2. SLF4J: Failed to load class org.slf4j.impl.StaticLoggerBinder

    以下为自己刚学习java遇到及排错过程 日志换成了 slf4j+logback,没看到本地有日志文件生成,调试时发现有错误提示(是在加载druid时出现的): SLF4J: Failed to loa ...

  3. SLF4J:Failed to load class org.slf4j.impl.StaticLoggerBinder

    SLF4J:Failed to load class "org.slf4j.impl.StaticLoggerBinder" 解决方案: <dependency>< ...

  4. SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“.解决方法

    在IDEA中启动JAVA程序之后,控制台中报以下错误信息 SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder&quo ...

  5. tomcat 启动显示日志级别,以及SLF4J: Failed to load class org.slf4j.impl.StaticLoggerBinder.错误

    把以前的一个老项目通过maven的方式搭了一下,tomcat启动时,打印信息特别多,当时判断日志显示级别应该是debug.但我配置与之前没有任何改变,所以问题应该出在pom.xml上,于是网上查找资料 ...

  6. 报错:SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“.

    报错 SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to n ...

  7. slf4j报错:SLF4J:Failed to load class org.slf4j.impl.StaticLoggerBinder.Defaulting to no-operat有效解决办法

    运行maven程序时报如下错误: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: D ...

  8. idea springboot启动报SLF4J:Failed to load class “org.slf4j.impl.StaticLoggerBinder

    文章目录 首先声明一下,我用的 Intellij IDEA 2018.3 版本的,springboot的版本是 2.0.5.RELEASE 版本. 当我喜滋滋的编写完测试代码,点击 Debug 的时候 ...

  9. 报错:SLF4J: Failed to load class org.slf4j.impl.StaticLoggerBinder“. SLF4J: Defaulting to no-operation

    报错: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 然后去 http://www.slf4j. ...

最新文章

  1. 基于TensorRT的BERT实时自然语言理解(上)
  2. Nginx安装及运行服务
  3. 【Android】3.22 示例22--LBS云检索功能
  4. 使用expdp导出时评估所需存储容量大小
  5. Windows Embedded从入门到精通4月预告
  6. jdk8 bug_JDK Bug系统浪费时间
  7. php syncml 协议,基于改进的SyncML协议的图像安全同步技术研究
  8. 高可用高性能负载均衡软件HAproxy详解指南-第一章(简介、安装)
  9. 数字后端基本概念介绍<IO Cluster>
  10. ACM竞赛入门,从零开始
  11. 自定义控件+ViewPage+Fragment....各种收获
  12. 泛函分析 06.01 线性算子的谱理论 - 谱集和正则点集
  13. 愤怒的小鸟是如何长大的
  14. 美团点评旅游搜索召回策略的演进
  15. OSChina 周日乱弹——幸福来的太突然
  16. 迎国庆,九月复盘你搞了多少钱?
  17. 2021-11-12每日刷题打卡
  18. VR系列--VR介绍
  19. 天没有塌下来,这里有GitHub之外的五个最佳选择
  20. python爬取练习 名侦探柯南剧集信息——各集列表

热门文章

  1. ubuntu,你改变了我的人生
  2. Qt tabwidget 标签页设置tabbar标题,tabwidget设置透明色
  3. 浙大计算机应用基础作业5,浙大远程计算机应用基础(A)作业5(含答案).doc
  4. 文献学习02-Effective Modeling of Encoder-Decoder Architcture for Joint Entity and Relation Extraction
  5. gif动图快速制作方法(附工具)(转)
  6. DataGridView 使用精华
  7. 2020年牛客算法入门课练习赛1
  8. 【华为机试真题 Python实现】字串转换 a->b,b->c
  9. android 6 功能介绍,微信7.0.6.1安卓版更新内容一览 新增功能介绍
  10. Qt 6.0正式发布了