本文主要介绍
1.日志框架基本介绍及Spring Boot中默认使用框架(SLF4J+LogBack);
2.SLF4J的使用
3.项目中日志框架统一问题
4.Spring Boot中如何实现日志框架统一问题(3的最佳实践)
1. 日志框架基本介绍
一般情况下搭建日志框架时,搭建 日志抽象层(定义接口) + 日志实现层组合 ,项目代码中应该使用抽象层,不应该使用日志实现类;
常见的日志框架包含:
日志抽象层: JCL(2014年不再维护), SLF4J,jboss-logging
日志实现层:jul(java.util.logging,jdk工具包下提供的),log4j, LogBack(log4j存在性能问题,logback是基于SLF4J抽象层编写的实现层), log4j2 (Apache下的,功能强大,但与其他的框架整合并不广泛)
(注:SLF4J,log4j,logback为同一个作者)
Spring框架选择了JCL作为默认日志输出;Spring Boot选择的是 SLF4J + LogBack作为默认日志;
2.SLF4J框架的使用
SLF4J日志框架基本使用 (抽象层 + 实现层)
1,引入SLF4J的Jar
2,引入实现层(log4j, jul等)对应的jar
3,引入对应实现层的slf4j适配器jar (适配器jar由SLF4J提供的,编写了SLF4J接口类的实现,不同适配器实现接口时,调用的是对应的实现层框架的方法;实现层为Logback时,不需要适配器jar,因为logback就是基于SLF4J抽象层编写);
3. 项目中日志框架统一问题
当项目中引入多个第三方jar,而每个jar底层使用的日志选型不一样,造成项目中日志框架混乱【Spring(commons logging)、Hibernate(jboss-logging)】
SLF4J提供的解决方案:引用第三方jar时,exclude对应的底层日志A.jar,引入由SLF4J提供的日志转换器 B.jar(当前适配器B.jar 定义了A.jar中一摸一样的类和方法,方法中通过调用SLF4J的API实现)
具体步骤:
-
排除系统中其他的日志框架
-
使用SLF4J提供的转换器包替换要替换的日志框架
-
引入要使用的SLF4J实现JAR
4.Spring Boot中如何实现日志框架统一问题(B的最佳实践)
Spring Boot 中使用的默认的日志框架为 SLF4J + LogBack
- 在spring-boot-dependencies中exclusion其他日志框架(3中1步骤)
- Spring Boot中spring-boot-starters 依赖了 spring-boot-starter-logging,而在spring-boot-starter-logging中 定一个了log4j及jul对应的转换包jar 及 logback对应的jar (3中的2 ,3 )