其他分享
首页 > 其他分享> > Spring Boot日志配置

Spring Boot日志配置

作者:互联网

  日志对于使用系统的各工作人员的重要性不言而喻,调试、上线后问题排查、后期用户行为分析等都少不了日志的身影。正确而有效地使用日志工具是功能能力一个重要的体现。

  Spring Boot提供了快速集成的日志方案,默认情况下使用该框架依赖了spring-boot-starter-logging。该依赖包提供了提供了日志系统一个抽象层接口可以与多种日志系统直接进行集成,比如SLF4J等。如果不指定具体使用何种日志系统默认集成Logback作为其实现,如指定在pom.xml文件中排除该默认集成添加指定日志实现。可参考如下操作:

          

   根据Spring Boot自动配置机制,即使不为日志系统定义配置文件也可以直接使用;但是如果其在class目录下发现了logback.xml或者log4j.properties,那么Spring Boot会依据这些进行配置。

  另外Spring Boot还提供了一种更为简洁的日志配置方式,就是直接在项目配置文件中进行配置(application.yml文件中进行配置)。结合Spring的扩展属性配置机制,可以在配置文件中为不同环境启动不同的日志级别(参考SpringBoot外部配置属性注入 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com))。

  那么Spring Boot是如何实现日志配置灵活处理的呢?其日志小框架的发挥了相当大的作用,下面一趟究竟:

    通常情况下,日志是由一个抽象层+实现层的组合来搭建的,如下:

               

  比如:Spring 框架选择使用了 JCL 作为默认日志输出。而 Spring Boot 默认选择了 SLF4J 结合 LogBack。这就会导致一个项目时没有太多问题,多个项目形成项目集群时出现问题:A项目(slf4J + logback): Spring(commons logging)、Hibernate(jboss-logging)、mybatis....,在项目中存在着各种不同的第三方 jar ,且它们的日志选择也可能不尽相同。

  显然,这样是不利于使用的,那么如果想为项目设置统一的日志框架该怎么办呢?参考SLF4J官网,其提供了可行解决方案Log4j Bridge (slf4j.org)

  如果不使用统一的日志框架,SLF4J API 永远作为日志的门面,直接应用与应用程序中,如下图SLF4J Manual
          

    由于每一个日志的实现框架都有自己的配置文件,所以在使用 SLF4j 之后,配置文件还是要使用实现日志框架的配置文件。

  如果需要统一的日志框架,可以这样实现:使用一种和要替换的日志框架类完全一样的 jar 进行替换,这样不至于原来的第三方 jar 报错,而这个替换的 jar 其实使用了 SLF4J API. 这样项目中的日志就都可以通过 SLF4J API 结合自己选择的框架进行日志输出。
          

  综合而言,统一日志框架使用步骤归纳如下:
    1. 排除系统中的其他日志框架。
    2. 使用中间包替换要替换的日志框架。
    3. 导入我们选择的 SLF4J 实现。

  那么Spring Boot的同一日志框架是不是也如上思想步骤呢?下面进行验证:

    1. 排除系统中的其他日志框架

          

    2. 使用中间包替换要替换的日志框架

      Spring Boot 是使用了 SLF4J+logback 的日志框架组合,查看 Spring Boot 项目的 Maven 依赖关系可以看到 Spring Boot 的核心启动器 spring-boot-starter 引入了 spring-boot-starter-logging。
          

      而 spring-boot-starter-logging 的 Maven 依赖主要引入了 logback-classic (包含了日志框架 Logback的实现),log4j-to-slf4j (在 log4j 日志框架作者开发此框架的时候还没有想到使用日志抽象层进行开发,因此出现了 log4j 向 slf4j 转换的工具),jul-to-slf4j ( Java 自带的日志框架转换为 slf4j)。
          

    3. 导入我们选择的 SLF4J 实现

      通过IDEA工具查看Maven依赖关系,可以清晰的看到日志框架的引用
          

   类似地做项目集群可以通过此方式实现同一日志框架。

 

          



  

    

 

 

    

 

标签:框架,Spring,Boot,SLF4J,使用,日志
来源: https://www.cnblogs.com/ilovebath/p/16362620.html