言成言成啊 | Kit Chen's Blog

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

这么多框架可能会让人感到困惑,下面我们逐步梳理它们的发展历程及相互关系。

日志框架的发展历程

  1. 1996 年:Log4j

    • Log4j 诞生,成为流行的 Java 日志框架,并贡献给 Apache 基金会。
    • 2015 年停止维护,其作者发起了 reload4j,用于修复 Log4j 1.2.17 版本中的漏洞,推荐搭配 slf4j-reload4j 使用。
  2. 2002 年:JUL(Java Util Logging)

    • Apache 曾建议 SUN 公司将 Log4j 并入 JDK,但遭拒绝。
    • Java 1.4 发布,内置日志库 JUL,模仿 Log4j 设计。
  3. 2002 年:JCL(Jakarta Commons Logging)

    • 提供统一的日志接口,解决多日志框架依赖问题,支持 Log4j、JUL 等实现。
    • 后更名为 Apache Commons Logging。
  4. 2006 年:SLF4J(Simple Logging Facade for Java)

    • 由 Log4j 作者发起,提供简单稳定的日志门面,统一日志 API。
    • 支持集成 JUL、Log4j、Reload4j 和 Logback 等多种实现。
  5. 2006 年:Logback

    • SLF4J 作者推出的新一代日志实现框架,成为当前最常用的日志框架。
  6. 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
2
3
4
5
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.32</version>
</dependency>

引入 Logback(推荐)

Logback 常用模块:

  • logback-core:Logback 核心模块
  • logback-classic:集成 logback-coreslf4j-api
  • logback-access:提供 Servlet 容器的 HTTP 访问日志记录功能

直接使用 Logback 时,仅需引入 logback-classic 依赖,内部已包含 slf4j-api,无需额外引入:

1
2
3
4
5
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.12</version>
</dependency>

轻量级日志方案(适用于脚本型项目)

如果项目不需要复杂的日志功能(如文件输出、滚动归档),可选择 slf4j-api + slf4j-simple 组合,仅支持控制台输出:

1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.32</version>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.32</version>
</dependency>

创建simplelogger.properties,配置日志格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 是否显示日志时间(true 显示,false 不显示)
org.slf4j.simpleLogger.showDateTime=true

# 日期时间格式(支持 SimpleDateFormat 格式)
org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss.SSS

# 是否显示线程名称(true 显示,false 不显示)
org.slf4j.simpleLogger.showThreadName=true

# 是否显示日志级别(true 显示,false 不显示)
org.slf4j.simpleLogger.showLogLevel=true

# 是否显示类的全名(false 时只显示短类名)
org.slf4j.simpleLogger.showLogName=false

# 是否显示短类名(true 时只显示简单类名,而不是全路径)
org.slf4j.simpleLogger.showShortLogName=false


# 配置默认日志级别(可选值:trace, debug, info, warn, error, off)
org.slf4j.simpleLogger.defaultLogLevel=info

# 针对不同的包/类单独设置日志级别
org.slf4j.simpleLogger.log.org.example.MyClass=debug
org.slf4j.simpleLogger.log.com.example.SomeService=warn

二、参考与致谢

SLF4J 官网

Reload4j 官网

Logback 官网

日志框架梳理(Log4j、Reload4j、JUL、JCL、SLF4J、Logback、Log4j2)

发布:2025-01-21 21:58:16
修改:2025-02-19 16:38:25
链接:https://meethigher.top/blog/2025/slf4j-logback/
标签:java log 
付款码 打赏 分享
Shift+Ctrl+1 可控制工具栏