介绍

SLF4J 是一个日志抽象层,它定义了一套统一的日志操作接口,本身不提供具体的日志输出实现,而是通过绑定不同的日志框架(如 Logback、Log4j 2、java.util.logging 等)来完成实际的日志输出。

作用:

  1. API 统一:提供一致的日志操作接口(Logger、info()、debug() 等),业务代码只需依赖 SLF4J API,无需关心底层实现。
  2. 解耦:业务代码与具体日志框架分离,切换日志框架时无需修改代码,仅需更换依赖的实现库。
  3. 兼容性:支持与几乎所有主流日志框架集成(Logback、Log4j 2、JUL 等)。

核心组件

  • API:定义日志操作接口
  • 绑定器:连接 SLF4J API 与具体日志框架的适配层,实现接口到具体框架的转发
  • 桥接器:将其他日志框架的 API 调用转换为 SLF4J API 调用

工作流程

  • 业务代码通过 SLF4J API(LoggerFactory)获取 Logger 实例。
  • SLF4J 加载绑定器(Classpath 中存在的具体日志框架适配器)。
  • 绑定器将 SLF4J API 调用转发到底层日志框架(如 Logback)。
  • 底层日志框架负责实际的日志输出(打印到控制台、写入文件等)。

使用

  1. 添加依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.9</version>
</dependency>
<!-- Log4j 2 核心 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.20.0</version>
</dependency>
<!-- SLF4J 绑定 Log4j 2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j2-impl</artifactId>
<version>2.20.0</version>
</dependency>
  1. 操作实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SLF4JDemo {
// 获取 Logger 实例(通常以类名作为日志名称)
private static final Logger logger = LoggerFactory.getLogger(SLF4JDemo.class);

public static void main(String[] args) {
String username = "admin";
int age = 30;

// 不同级别日志
logger.trace("这是 trace 级日志(最详细,通常用于调试)");
logger.debug("这是 debug 级日志(调试信息)");
logger.info("用户 {} 登录成功", username); // 参数化日志
logger.warn("用户 {} 年龄为 {},可能存在风险", username, age);
logger.error("用户 {} 操作失败", username, new RuntimeException("数据库连接异常")); // 带异常的日志
}
}