日志是什么?
日志是一个记录事件的组件,无论是记录运行情况还是追踪线上问题,都需要分析日志。
为什么需要日志框架?
场景演变:
1、最初时利用System.out.println("msg")来输出关键信息到控制台
2、当需要隐藏一些信息就需要手动注释掉代码
3、当关键信息不需要输出到控制台而是文件中,方便后续跟踪,则又需要统一修改代码
4、此时可以初步实现一个日志框架1.0版本
5、当需要日志记录不会阻塞程序的运行,或者统一归档,又或者按照时间来分类记录
6、此时需要开发一个日志框架2.0
7、同时需要替换原来的jar包,这就需要修改相关的API,这样每次更新都要频繁的修改API
8、借鉴JDBC和数据库驱动的思想,我们需要设计一个统一的接口API和不同的API实现,这样在不修改源代码的基础上只需更换API的实现jar包就可以更改底层实现逻辑
常见的日志框架
- 日志抽象层:JCL、SLF4J、jboss-logging
- 日志实现层:jul、log4j、logback、log4j2
分析:
jboss-logging-----对于特定框架来使用
JCL-----已经不更新了
jul-----功能不够强大
log4j-----存在性能问题
logback-----优化log4j新产生的实现
log4j2-----功能强大
Spring框架默认使用JCL(Commmons logging)作为日志输出
SpringBoot采用的日志框架为:日志抽象层SLF4J + 具体实现logback
SLF4J的使用
SLF4J官方案例
首先导入SLF4J的jar包
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
// 创建一个记录器,用来专门记录HelloWorld.class类的相关信息
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
// 日志输出
logger.info("Hello World");
}
}
使用SLF4J结合不同的日志实现
- SLF4始终作为日志门面,绑定log4j和jul时需要引入适配工具 Adaptation layer,
- 每个日志实现框架都有自己的配置文件,所以在使用SLF4J之后还需要使用日志实现的配置文件。
统一日志框架
在项目中会使用其他第三方框架引入其他的日志实现,导致项目中的jar包有多又乱,所以需要统一日志框架:
- 排除项目中其他日志框架
- 使用中间包替换排除的日志框架
- 引入需要统一的日志框架
SpringBoot中默认是SLF4J+logback,已经完成其他日志框架的排除,比如:
通过<exclusions>和<exclusion>标签
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-console</artifactId>
<version>${activemq.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>