Java日志框架-SLF4J与Logback
发布于2025-01-21 21:58:16,更新于2025-02-19 16:38:25,标签:java log 文章会持续修订,转载请注明来源地址:https://meethigher.top/blog一、日志
1.1 历史
在了解日志框架时,我们通常会看到以下几个主要框架:
- Log4j
- Reload4j
- JUL(Java Util Logging)
- JCL(Jakarta Commons Logging)
- SLF4J(Simple Logging Facade for Java)
- Logback
这么多框架可能会让人感到困惑,下面我们逐步梳理它们的发展历程及相互关系。
日志框架的发展历程
1996 年:Log4j
- Log4j 诞生,成为流行的 Java 日志框架,并贡献给 Apache 基金会。
- 2015 年停止维护,其作者发起了
reload4j
,用于修复 Log4j 1.2.17 版本中的漏洞,推荐搭配slf4j-reload4j
使用。
2002 年:JUL(Java Util Logging)
- Apache 曾建议 SUN 公司将 Log4j 并入 JDK,但遭拒绝。
- Java 1.4 发布,内置日志库 JUL,模仿 Log4j 设计。
2002 年:JCL(Jakarta Commons Logging)
- 提供统一的日志接口,解决多日志框架依赖问题,支持 Log4j、JUL 等实现。
- 后更名为 Apache Commons Logging。
2006 年:SLF4J(Simple Logging Facade for Java)
- 由 Log4j 作者发起,提供简单稳定的日志门面,统一日志 API。
- 支持集成 JUL、Log4j、Reload4j 和 Logback 等多种实现。
2006 年:Logback
- SLF4J 作者推出的新一代日志实现框架,成为当前最常用的日志框架。
2014 年:Log4j2
- Log4j 官方推出的新版本,功能更强,性能更优。
1.2 日志规范及实现分类
日志规范
- JCL(Jakarta Commons Logging)
- SLF4J(Simple Logging Facade for Java)
所谓日志规范,仅定义了顶层接口 API,并不提供具体实现。
这里记录一个趣事:在适配东方通 TongWeb 时,我的程序日志报错了。排查后发现 TongWeb 修改了 SLF4J 的包名,将
org.slf4j
改成了com.tongweb.slf4j
,导致日志系统无法正常工作,对方倒是考虑周到,还提供兼容 SLF4J 的 SDK,细节可以参考这篇文章。
日志实现框架
- Log4j / Reload4j / Log4j2
- JUL(Java 早期版本设计,并未区分接口与实现)
- Logback
在实际应用中,推荐使用 SLF4J + Logback 组合。Logback 设计目标是替代 Log4j 1.x
,并且被 Spring Boot 选为默认日志框架。
1.3 依赖引入
引入 SLF4J API
1 | <dependency> |
引入 Logback(推荐)
Logback 常用模块:
logback-core
:Logback 核心模块logback-classic
:集成logback-core
和slf4j-api
logback-access
:提供 Servlet 容器的 HTTP 访问日志记录功能
直接使用 Logback 时,仅需引入 logback-classic
依赖,内部已包含 slf4j-api
,无需额外引入:
1 | <dependency> |
轻量级日志方案(适用于脚本型项目)
如果项目不需要复杂的日志功能(如文件输出、滚动归档),可选择 slf4j-api
+ slf4j-simple
组合,仅支持控制台输出:
1 | <dependency> |
创建simplelogger.properties
,配置日志格式
1 | # 是否显示日志时间(true 显示,false 不显示) |
二、参考与致谢
打赏