目录
- 1. 日志系统介绍
- 2. slf4j的使用
- 2.1 slf4j的入门
- 2.2 slf4j绑定日志框架
1. 日志系统介绍
日志门面位于应用程序和日志框架之间,日志门面提供一个抽象的能力,日志框架进行具体的日志实现。可以很方便的更换日志框架。类似JDBC驱动
日志门面有:
- JCL:很古老,apache旗下的,不能兼容其它的日志框架
- slf4j
日志框架有:
- JUL:JDK自带的,功能简单,实现JCL
- log4j:不维护了,实现JCL
- logback:实现slf4j
- log4j2:比logback性能好,实现slf4j。虽然也是日志门面,但还是推荐使用slf4j做日志门面,可以方便的切换到logback或其它日志框架
2. slf4j的使用
2.1 slf4j的入门
slf4j(Simple Logging Facade For Java)给Java日志提供一套标准、规范
的API框架,主要提供接口,具体的实现交由其他日志框架。虽然slf4j提供了简单的实现,但很少使用
一般会选择slf4j-api作为门面,再配上具体的实现框架(log4j、logback等),中间使用桥接器完成桥接
slf4j主要提供两大功能:
- 日志框架的绑定
- 日志框架的桥接
slf4j入门实战
在pom.xml添加依赖
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
<!-- slf4j自带的简单日志实现 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.36</version>
</dependency>
</dependencies>
示例程序如下:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Slf4jTest {
public final static Logger LOGGER = LoggerFactory.getLogger(Slf4jTest.class);
public static void main(String[] args) {
// 打印不同级别的日志信息。默认只打印info及以上级别的日志
LOGGER.error("error");
LOGGER.warn("warn");
LOGGER.info("info");
LOGGER.debug("debug");
LOGGER.trace("trace");
// 使用占位符输出日志信息
String name = "bulut";
Integer age = 18;
LOGGER.info("姓名:{}, 年龄:{}", name, age);
// 将系统异常信息写入日志
try {
int i = 1 / 0;
} catch (Exception e) {
LOGGER.error("出现异常:", e);
}
}
}
运行程序,结果如下:
[main] ERROR Slf4jTest - error
[main] WARN Slf4jTest - warn
[main] INFO Slf4jTest - info
[main] INFO Slf4jTest - 姓名:bulut, 年龄:18
[main] ERROR Slf4jTest - 出现异常:
java.lang.ArithmeticException: / by zero
at Slf4jTest.main(Slf4jTest.java:24)
2.2 slf4j绑定日志框架
slf4j的日志绑定流程:
- 添加slf4j-api的依赖
- 使用slf4j的API在项目中进行统一的日志记录
- 绑定具体的日志框架
- 绑定已经实现了slf4j的日志框架, 直接添加其依赖
- 绑定没有实现slf4j的日志框架, 先添加日志框架的适配器, 再添加日志框架的依赖
- slf4j只能绑定一个日志框架(如果出现多个,默认使用第一个依赖的日志框架)
上面的图片来源slf4j官网manual
具体的绑定情况如下:
- 如果只添加了slf4j-api,则不打印日志信息
- Underlying logging framework蓝色部分:
- logback:只需添加ch.qos.logback:logback-classic:1.2.11(依赖org.slf4j:slf4j-api:1.7.32)依赖即可,会自动依赖logback-core
- slf4j-simple:只需添加slf4j-simple依赖即可
- slf4j-nop:添加了该org.slf4j:slf4j-nop:1.7.36依赖,不会打印日志信息
- Adaptation layer灰色部分:
- reload4j(log4j):先添加适配器org.slf4j:slf4j-reload4j:1.7.36(依赖ch.qos.reload4j:reload4j:1.2.19)依赖,再添加ch.qos.reload4j:reload4j:1.2.21依赖。需要添加appenders到resources目录下,即log4j.properties日志属性配置文件
- JUL:虽然用的是JDK11,也是添加org.slf4j:slf4j-jdk14:1.7.36