深入理解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日志——框架绑定原理】
推荐阅读
- 全新8核国产CPU深入探秘:马上能买到
- 数据|新基建时代,高大全的数据管理解决方案是怎样“炼”成的?
- 16G运存+256G内存,专业骁龙865旗舰,性价比深入人心
- “我”由我掌镜:华为nova8 Pro瞄向Vlogger助力成就Vlog达人
- 深入理解Netty编解码、粘包拆包、心跳机制
- 绿色骑行深入校园,共享单车长途长时需求量提升
- 不被理解的超时代发明,你知道几个?在线膜拜大神,西瓜视频真相
- 深入调查SolarWinds黑客事件 微软已查封一个核心服务器
- 《深入理解Java虚拟机》:Java内存区域
- 深入探讨 JavaScript 逻辑赋值运算符