介绍
SLF4J 是一个日志抽象层,它定义了一套统一的日志操作接口,本身不提供具体的日志输出实现,而是通过绑定不同的日志框架(如 Logback、Log4j 2、java.util.logging 等)来完成实际的日志输出。
作用:
- API 统一:提供一致的日志操作接口(Logger、info()、debug() 等),业务代码只需依赖 SLF4J API,无需关心底层实现。
- 解耦:业务代码与具体日志框架分离,切换日志框架时无需修改代码,仅需更换依赖的实现库。
- 兼容性:支持与几乎所有主流日志框架集成(Logback、Log4j 2、JUL 等)。
核心组件
- API:定义日志操作接口
- 绑定器:连接 SLF4J API 与具体日志框架的适配层,实现接口到具体框架的转发
- 桥接器:将其他日志框架的 API 调用转换为 SLF4J API 调用
工作流程
- 业务代码通过 SLF4J API(LoggerFactory)获取 Logger 实例。
- SLF4J 加载绑定器(Classpath 中存在的具体日志框架适配器)。
- 绑定器将 SLF4J API 调用转发到底层日志框架(如 Logback)。
- 底层日志框架负责实际的日志输出(打印到控制台、写入文件等)。
使用
- 添加依赖
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>
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.20.0</version> </dependency>
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j2-impl</artifactId> <version>2.20.0</version> </dependency>
|
- 操作实例
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 { 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("数据库连接异常")); } }
|