概述
由于Java日志功能发布较晚,开源社区的日志组件发展日趋成熟,导致应用系统中日志组件依赖比较混乱。
常见 log 组件
组件名称 | 分类 | 备注 |
---|---|---|
SLF4J | 接口 | slf4j-api.jar |
Commons-logging (jcl) | 接口 | commons-logging.jar / jcl-over-slf4j.jar |
Log4j2 | 接口 + 实现 | log4j-api.jar, log4j-core.jar, log4j-slf4j-impl.jar, log4j-to-slf4j-2.x.jar |
Log4j | 实现 | log4j.jar / log4j-over-slf4j.jar |
Logback | 实现 | logback-classic.jar, logback-core.jar |
java.util.logging (jul) | 实现 | jul-to-slf4j.jar / JDK 1.4+ |
总结:
- xxx-over-slf4j.jar 表示采用适配器模式(Adapter Pattern)实现调用转发;
- xxx-to-slf4j.jar 表示采用桥模式(Bridge Pattern)实现调用转发;
常见模式
SLF4J 推荐的模式
模式总结:日志API => slf4j-api => 原生实现 | (适配器 + 非原生实现)
Log4j2 推荐的模式
模式总结:日志API (适配器) => log4j-api-2.x => 原生实现
模式总结
个人推荐采用slf4j的模式,更利于项目的长期维护(如果log4j再次升级,比如log4j3,几乎需要升级全部组件,升级阻力较大),如下图:
日志组件使用总结.png
网友评论