一、前言
在项目的开发中,日志是必不可少的一个记录事件的组件,所以也会相应的在项目中实现和构建我们所需要的日志框架。而市面上常见的日志框架有很多,比如:JCL、SLF4J、Jboss-logging、jUL、log4j、log4j2、logback等等,我们该如何选择呢?通常情况下,日志是由一个抽象层+实现层的组合来搭建的。
| 日志-抽象层 | 日志实现层 |
|---|---|
| Log4j JUL(java.util.logging)Log4j2 Logback |
二、分析
我们先从日志实现分析下手,
- JUL(java.util.logger) 直接放弃使用,设计简单,不足以支撑开发应用系统。
- Log4j 是非常流行的日志实现,但是目前作者进行了日志升级就是LogBack,作者在官网声明了logback的很多优点比log4j更强大,可参考官网。https://logback.qos.ch/index.html。
- Log4j2 性能强悍,设计过于复杂,很多开源框架不支持,很容易踩坑。不推荐使用,而且logback的性能足以支撑使用。所以我们采用的日志实现是logback。
- logback 和log4j的作者是同一个人,属于log4j的升级版,性能更好!
springboot采用的同样也是SLF4j+logback的日志框架
三、历史遗留问题
| 开发框架 | 对应使用的日志框架 |
|---|---|
| springboot | slf4j+logback |
| Spring | commons-logging |
| Hibernate | jboss-logging |
由于java的开发框架众多,每个框架使用时日志框架又不同,那么我们如何统一日志记录,即使是别的框架和我一起统一使用slf4j进行输出?

让系统中所有的日志都统一到slf4j的步骤如下:
- 将系统中其他日志框架先排除出去;
- 用中间包来替换原有的日志框架;
- 我们导入slf4j其他的实现
springboot的日志关系
SpringBoot使用它来做日志功能;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐logging</artifactId>
</dependency>
底层关系依赖图:

由关系依赖图可以看出
1)、SpringBoot底层也是使用slf4j+logback的方式进行日志记录
2)、SpringBoot也把其他的日志都替换成了slf4j(使用中间替换包);
如果我们要引入其他框架?一定要把这个框架的默认日志依赖移除掉?
Spring框架用的是commons-logging:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐core</artifactId>
<exclusions>
<exclusion>
<groupId>commons‐logging</groupId>
<artifactId>commons‐logging</artifactId>
</exclusion>
</exclusions>
</dependency>
4322



被折叠的 条评论
为什么被折叠?



