一、日志框架统一问题

在实际开发中,我们开发一个项目往往需要使用很多其他三方框架,而三方框架本身也内置了日志文件。这就导致我们的项目所使用的日志框架和三方框架所使用的日志框架不一致,且三方框架之间也不一致。

例如 Project(SLF4J+logback):Spring(commons-loggin)、Hibernate(jboss-logging)等。

这就要求我们统一日志记录,即使使用不同类型的框架也能统一使用SLF4J进行统一记录输出。

实现步骤:

  1. 将系统中的其他日志框架先排除出去
  2. 用中间包来替换原有的日志框架
  3. 导入slf4j其他的日志实现jar

legacy.png

二、Spring Boot日志关系

  1. <!--每个SpringBoot项目都依赖场景启动器spring-boot-starter-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter</artifactId>
  5. </dependency>
  6. <!--而场景启动器spring-boot-starter又依赖于日志启动器spring-boot-starter-logging-->
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-logging</artifactId>
  10. </dependency>
  11. <!--SpringBoot使用它来做日志功能-->

底层依赖关系
搜狗截图20180131220946.png
总结:

  1. Spring Boot底层也是使用SLF4J+Logback的方式来进行日志记录的
  2. Spring Boot也把其他的日志都替换成了SLF4J
  3. 使用中间替换包替换其他日志框架的底层实现
@SuppressWarnings("rawtypes")
public abstract class LogFactory {
    // 底层被替换层了SLF4J的factory
    static LogFactory logFactory = new SLF4JLogFactory();

搜狗截图20180131221411.png

三、引入其他日志框架

如果我们要引入其他框架,一定要把这个框架的默认日志依赖移除掉

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <exclusions>
          <!--移除其Spring自带的日志框架,使用Spring Boot的日志框架-->
                <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                </exclusion>
        </exclusions>
</dependency>

Spring Boot能自动适配所有的日志,而且底层使用SLF4J+Logback的方式记录日志,引入其他三方框架的时候,只需要把该框架依赖的日志框架按上述操作排除掉即可。