日志框架知识
1. slf4j是门面(slf4j-api)
即使实现包变化,应用中使用门面的api不变,只需要对包进行管理即可替换日志实现
a. 组合使用log4j:强行过渡slf4j-log4j12 + log4j
b. 组合使用log4j2:api过渡log4j-slf4j-impl + log4j-api + log4j-core
c. 组合使用logback:(直接实现slf4j-api) logback-classic + logback-core
2. 桥接包
如果要替换原实现包,eg log4j/jcl/jul存在桥接包用来将实现代理给slf4j,再转给其他实现包
<dependencies>
<!-- Java Commons Logging redirect to slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
<!-- Apache log4j redirect to slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</dependency>
<!-- Java Util Logging redirect to slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
</dependency>
</dependencies>
使用了桥接包,就要把原实现包排除,因为桥接包里面有一样的api
桥接包版本跟着slf4j-api版本
解决问题
1. catalina.out报错信息不足,只有
严重: Error listenerStart 严重: Context [/lizongbo] startup failed due to previous errors
2. 在springboot中使用log4j2需要排除logback的包和配置
参考文章
一文读懂log4j logback log4j2 logback slf4j关系 - 含源码 - 知乎
log4j-over-slf4j的jar包适配原理解析-优快云博客
IDEA在用Maven引入依赖时,对于log4j与slf4j的依赖冲突的解决办法_log4j-over-slf4j maven-优快云博客
其他文章
快速了解常用日志技术(JCL、Slf4j、JUL、Log4j、Logback、Log4j2)
tomcat8替换成slf4j: