深入理解Logger日志——框架绑定原理( 二 )
以下是个人收集一些比较简单好理解的 绑定关系图, 体现了 StaticLoggerBinder 绑定的重要性
文章插图
文章插图
绑定过程中所遇到的问题1、Log4j和Log4j2需要配置好log4j.xml和log4j2.xml文件 , 不然无法正常使用 , Logback可以正常使用
2、与SpringBoot的spring-boot-starter中的依赖spring-boot-starter-logging内部的依赖 Logback 产生冲突(可以自己点击查看一番)
Caused by: java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.impl.Log4jLoggerFactory loaded from file:/Users/zhouguanglin/.m2/repository/org/slf4j/slf4j-log4j12/1.7.29/slf4j-log4j12-1.7.29.jar). If you are using WebLogic you will need to add 'org.slf4j' to prefer-application-packages in WEB-INF/weblogic.xml: org.slf4j.impl.Log4jLoggerFactoryat org.springframework.util.Assert.instanceCheckFailed(Assert.java:699)at org.springframework.util.Assert.isInstanceOf(Assert.java:599)at org.springframework.boot.logging.logback.LogbackLoggingSystem.getLoggerContext(LogbackLoggingSystem.java:284)at org.springframework.boot.logging.logback.LogbackLoggingSystem.beforeInitialize(LogbackLoggingSystem.java:104)at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationStartingEvent(LoggingApplicationListener.java:232)at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:213)
主要原因是:SpringBoot所使用的搭配日志框架是Logback
若是项目使用SpringBoot但搭配的是其他日志框架A , 由StaticLoggerBinder.getSingleton().getLoggerFactory()获取的是搭配框架A的实现 , 导致与SpringBoot内部自身搭配的Logback产生冲突 , 可以进入报错地方查看 。
文章插图
从代码逻辑中可以发现 , Assert.isInstanceOf 判断获取得到的ILoggerFactory的实现类必须是LoggerContext 才OK , 硬性规定不然就会报错 。
解决方案:只要在SpringBoot中排除Logback的依赖就OK , 如下:
【深入理解Logger日志——框架绑定原理】
- 设计模式6之代理模式
- 大牛深入解析SpringBoot核心运行原理和运作原理源码
- 一线大牛带你深入解析AutoConfiguration源码
- 更新了!深入浅出图解Git,入门到精通(保姆级教程)第三篇
- 《深入理解Java虚拟机》:锁优化
- 飞智对手游的理解或许领先行业一个时代,全新八爪鱼2代上手
- 理解JavaScript中的浅拷贝与深拷贝
- 怎么理解分布式、高并发、多线程
- 5分钟理解Redis持久化
- 深入了解一加8/8T系列 看完就知道该不该买