本文摘录总结于极客时间——《Java业务开发常见 100 例》 一些同学可能就会说了,记录日志还不简单,无非就是几个常用的 API 方法,比如 debug、info、warn、error,但日志其实不只是
本文摘录总结于极客时间——《Java业务开发常见 100 例》
一些同学可能就会说了,记录日志还不简单,无非就是几个常用的 API 方法,比如 debug、info、warn、error,但日志其实不只是这些,容易出错主要是三个方面:
- 日志框架众多,不同的类库可能会使用不同的日志框架,如何兼容是一个问题;
- 配置复杂且容易出错。日志配置文件通常很复杂,因此有些开发同学会从其他项目或者网络上复制一份配置文件,但却不知道如何修改,甚至胡乱修改,造成很多问题;
- 日志记录本身就有误区,比如没考虑到日志内容获取的代价、胡乱使用日志级别等。
Logback、Log4j、Log4j2、commons-logging、JDK 自带的 java.util.logging 等,都是 Java 体系的日志框架,确实非常多。而不同的类库,还可能选择使用不同的日志框架。这样一来,日志的统一管理就变得非常困难。为了解决这个问题,就有了 SLF4J,如下图所示:
SLF4J 实现了三种功能:
- 一是提供了统一的日志门面 API,即图中紫色部分,实现了中立的日志记录 API。
- 二是桥接功能,即图中蓝色部分,用来把各种日志框架的 API(图中绿色部分)桥接到 SLF4J API。
- 三是适配功能,即图中红色部分,可以实现 SLF4J API 和实际日志框架(图中灰色部分)的绑定。
虽然图中有 4 个灰色的日志实现框架,但我看到的业务系统使用最广泛的是 Logback 和 Log4j,但这两个框架出自同一个之手。Logback 可以视为 Log4j 的改进版本,我更推荐使用。
并且,SpringBoot 是目前最流行的 Java 框架,它的日志框架也是用的 Logback,Logbook 已经被依赖到 spring-boot-starter-logging 模块。
所以接下来的介绍都是以 Logback 为主。