1 日志框架简介
(参考: http://xfhnever.com/2015/09/20/log-java-2/)
各种日志框架可以分为两类:
日志实现框架: jdk 自带的 logging(jul),log4j1,log4j2,logback
日志门面, 即提供统一的接口不提供实现: apache 的 commons-logging(jcl),slf4j
2 日志实现框架需要的 jar 包
log4j:
log4j:log4j1 的全部内容
log4j2:
log4j-api:log4j2 定义的 API
log4j-core:log4j2 上述 API 的实现
logback:
logback-core:logback 的核心包
logback-classic:logback 实现了 slf4j 的 API
3 slf4j 需要的 jar 包
slf4j-api
4 slf4j 转向具体日志实现框架
项目中使用 slf4j 接口进行编程, 而 slf4j 并没有整整的日志实现,需要我们加入日志实现依赖, 并引入 slf4j 到某个具体日志实现的桥梁
slf4j-jdk14:slf4j 到 jdk-logging 的桥梁
slf4j-log4j12:slf4j 到 log4j1 的桥梁 (之前一直以为是到 log4j2 的桥梁, 引起错误)
log4j-slf4j-impl:slf4j 到 log4j2 的桥梁 (log4j2 使用该包)
logback-classic:slf4j 到 logback 的桥梁
slf4j-jcl:slf4j 到 commons-logging 的桥梁
5 日志实现转向 slf4j
例如包使用 log4j 作为日志实现, 而我们的项目使用 log4j2 作为日志实现, 那么我们可以将 log4j 的日志输出交给 slf4j,slf4j 再交给 log4j2 来输出. 这一部分主要用来进行实际的日志框架之间的切换
jul-to-slf4j:jdk-logging 到 slf4j 的桥梁
log4j-over-slf4j:log4j1 到 slf4j 的桥梁
jcl-over-slf4j:commons-logging 到 slf4j 的桥梁
6 最佳实践
一般使用 slf4j 提供统一的日志接口, 加上 slf4j 到具体日志实现的桥梁, 最后再引入具体的日志实现. 如使用 log4j2 的配置
- <!--slf4j-->
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>1.7.25</version>
- </dependency>
- <!-- 桥梁 -->
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-slf4j-impl</artifactId>
- <version>2.9.1</version>
- </dependency>
- <!--log4j2-->
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api</artifactId>
- <version>2.11.0</version>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-core</artifactId>
- <version>2.11.0</version>
- </dependency>
参考
- http://xfhnever.com/2015/09/20/log-java-2/
- https://www.cnblogs.com/hafiz/p/6170702.html
来源: http://www.bubuko.com/infodetail-2562592.html