在 Java 里“Logger 怎么选型”通常包含两层含义:
1️⃣ 日志框架(实现)怎么选
2️⃣ 日志门面(API)怎么选
下面给你一个清晰、实战导向的总结。
日志门面(API):写代码时用的接口
日志实现(Backend):真正写文件/控制台的东西
常见组合:
| 门面(API) | 实现(Backend) |
|---|---|
| SLF4J | Logback / Log4j2 |
| JUL(java.util.logging) | JUL |
| Commons Logging | Log4j 1.x(已淘汰) |
✅ 推荐原则:
门面用 SLF4J,实现用 Logback 或 Log4j2
优点
缺点
✅ 适合:绝大多数业务系统、Spring Boot 项目
优点
缺点
✅ 适合:
优点
缺点
❌ 不推荐新项目使用
private static final Logger log =
LoggerFactory.getLogger(OrderService.class);
优点
❌ 不推荐直接用 Log4j / JUL API
<!-- Spring Boot 已内置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
并排除 logback:
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
| 场景 | 推荐 |
|---|---|
| 普通业务系统 | SLF4J + Logback |
| Spring Boot | SLF4J + Logback(默认) |
| 高并发 / 高吞吐 | SLF4J + Log4j2 |
| 老系统迁移 | SLF4J + 适配桥接 |
| 不想引入依赖 | JUL(不推荐) |
✅ 永远用门面(SLF4J)
✅ 不用 System.out.println
✅ 不用字符串拼接:
// ❌
log.info("user " + user);
// ✅
log.info("user {}", user);
✅ 生产环境:
新项目无脑 SLF4J + Logback;性能敏感选 Log4j2;别用 JUL,别直接耦合实现。
如果你愿意,可以告诉我:
我可以给你一套具体依赖 + 配置文件。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。