Skip to content

1️⃣ SLF4J(Simple Logging Facade for Java)

定位:日志门面(Facade) 作用:提供统一的日志接口,屏蔽底层日志实现差异。

  • 特点
    • 只提供接口,不直接输出日志;
    • 支持绑定到多种日志实现(log4j 1.x、log4j2、logback、JUL等);
    • 可以在开发时使用统一 API,部署时根据需要选择实际日志实现。
  • 常用 API
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.info("Hello SLF4J");
logger.debug("Debug info");
  • 总结: SLF4J = “日志门面”,不负责日志输出,只定义规范。

2️⃣ log4j(Apache Log4j 1.x)

定位:经典日志框架 版本:1.x 系列已经停止更新,存在安全问题(如 Log4Shell 漏洞在 log4j 1.x 不存在,但 2.x 有类似漏洞历史)

  • 特点
    • 提供 logger、appender、layout 三大核心概念;
    • 支持多种输出方式(控制台、文件、数据库、Socket);
    • 配置灵活(properties、XML)。
  • 问题
    • log4j 1.x 已停止维护,不支持异步日志(需要第三方 AsyncAppender);
    • 有些 API 设计老旧,不够现代。
  • 典型使用
Logger logger = Logger.getLogger(MyClass.class);
logger.debug("Debug info");
logger.info("Info message");

3️⃣ log4j2(Apache Log4j 2.x)

定位:log4j 的重写和升级版

  • 特点
    • 性能更高(异步日志使用 LMAX Disruptor 实现);
    • 配置更灵活(XML、JSON、YAML、properties);
    • 完整支持异步日志,减少 I/O 阻塞;
    • 向下兼容 log4j 1.x API(通过 log4j-1.2-api 适配);
    • 支持插件式 Appender。
  • 总结: log4j2 = log4j 1.x 的现代替代品,适合高性能、现代化应用。

4️⃣ logback

定位:由 log4j 创始人 Ceki Gülcü 开发的日志框架 特点

  • 性能优异,设计现代;
  • 完全兼容 SLF4J(开发者推荐 SLF4J + logback);
  • 默认异步日志支持(AsyncAppender);
  • 更好的配置方式(XML,支持条件判断、滚动策略丰富);
  • 默认格式化功能强大。
  • 典型使用
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.info("Hello logback");

注意:logback 不直接使用 log4j API,而是直接实现了 SLF4J 接口。


5️⃣ 它们之间的关系

+-----------------------+
|        SLF4J          |  <-- 门面,提供统一接口
+----------+------------+
           |
           | 绑定到实际日志实现
           v
+-----------------------+  +-----------------+  +------------------+
|      log4j 1.x        |  |    log4j2       |  |     logback      |
+-----------------------+  +-----------------+  +------------------+
  • SLF4J:开发时依赖接口,不直接绑定实现。
  • log4j 1.x:旧日志框架,配置灵活但过时。
  • log4j2:现代 log4j,性能更高,推荐替代 log4j 1.x。
  • logback:现代日志框架,默认实现 SLF4J,功能全面,性能高,常用在 Spring Boot 中。

6️⃣ 选择建议

场景推荐方案
新项目(Spring Boot / 高性能)SLF4J + logback 或 SLF4J + log4j2
旧项目(依赖 log4j 1.x)可升级 log4j2 或添加 SLF4J 适配层
高并发异步场景log4j2(Disruptor)或 logback 异步

7️⃣ 小结

  • SLF4J = 日志门面,不输出日志;
  • log4j 1.x = 经典但过时,不推荐新项目使用;
  • log4j2 = log4j 重写版,性能高、支持异步;
  • logback = 现代日志框架,完全兼容 SLF4J,功能丰富。

实际开发中最推荐组合:SLF4J + logbackSLF4J + log4j2,这样开发统一接口,部署可切换日志实现。