情景
在Java依赖中经常看到各种日志依赖,但搞不清他们之间的关系。
梳理
常见日志组件分类
- API类:
- Commons Logging
- SLF4J
- 实现类
- JDK Logging
- Logback
- Log4J
- Log4J2(其实这只是Log4J的2.x版本,但因为有比较大改动,所以网上有比较多人单独列出以区分Log4J 1.x版本)
ps: 入门教程可参考廖雪峰的网站
为什么这么多呢?
其实SLF4J类似于Commons Logging,也是一个日志接口,而Logback类似于Log4j,是一个日志的实现。
为什么有了Commons Logging和Log4j,又会蹦出来SLF4J和Logback?这是因为Java有着非常悠久的开源历史,不但OpenJDK本身是开源的,而且我们用到的第三方库,几乎全部都是开源的。开源生态丰富的一个特定就是,同一个功能,可以找到若干种互相竞争的开源库。
因为对Commons Logging的接口不满意,有人就搞了SLF4J。因为对Log4j的性能不满意,有人就搞了Logback。