Spring Boot 进阶-如何自定义SpringBoot日志配置?

时间:2024-10-01 16:30:40

在这里插入图片描述
  在之前的文章中我们介绍了Spring Boot中的日志框架,并且也介绍了SpringBoot日志框架中日志级别的调整。这篇文章我们主要来介绍关于如何让日志框架更加符合我们自己的需求。那么首先我们就来看一下日志文件输出路径的配置。

如何指定日志文件的输出位置

  在Spring Boot中日志是默认别输出到控制台的,但是这样的做法在测试生产环境显然是不可取的,所以我们就需要将日志输出到指定的路径中的指定文件中,这样既方便了我们查找问题,也方便我们利用日志来进行大数据分析等操作。

  在Spring Boot 日志模块配置中有两个配置非常重要,如下所示。

logging:
  level:
    com.example.demo: debug
  file:
    path: ./log
    name: test.log

  其中我们指定了日志生效的级别,以及日志的路径和日志文件名。下面我们来测试一下。会看到运行项目之后,会在当前路径下创建一个test.log的文件,其中内容就是在控制台输出的日志内容。
在这里插入图片描述
  这里需要注意点,就是在官方文档中表述,path和name两个属性不能同时配置,否则只能生效一个或者是不生效。这里需要注意。例如上面的配置中我们看到对于path的配置实际上是没有生效的。

  当然在日志文件的相关配置中还有其他的一些属性配置,例如日志大小、日志保留天数等等,这个在下面我们会介绍到。

如何定制日志格式呢?

  在之前的文章中我们介绍了关于日志默认格式都有哪些内容,那么我们如何利用Spring Boot默认的日志配置来自定义自己的日志输出格式呢?

  这里有两个配置需要进行修改

logging:
  level:
    com.example.demo: debug
  file:
    path: H:\demo\log
    name: test.log
  pattern:
    console: '%d{yyyy-MM-dd --- HH:mm:ss} [%thread] %-5level %logger -%msg%n'
    file: '%d{yyyy-MM-dd} [%thread] %-5level %logger -%msg%n'

  其中console是用来配置控制台日志的输出,而file是用来控制日志文件中日志格式,这里需要注意一点,就是再基于YML文件配置的时候,由于YML配置文件不支持SPEL表达式,所以需要将其用单引号引起来。

在这里插入图片描述
  如图所示,整个的日志格式都发生了变化。进行了对应的调整显示。这里我们来说明一下日志配置中各种配置项的含义

  • %d{HH:mm:ss SSS} 标识日志输出的时间
  • %thread 标识输出日志进程号,整个在异步多线程中会很有用
  • %-5level 标识日志级别,使用5个字符并且左对齐
  • %logger 输出日志的名称
  • %msg–日志消息内容
  • %n–日志换行符

使用不同的日志框架来实现自定义日志配置?

  在Spring Boot的官方文档中,对于不同的日志系统,指定了不同的日志配置文件的格式,只需要按照对应的日志配置文件进行配置,那么一定就可以被SpringBoot框架加载内容。

  • LogBack :支持 logback-spring.xml,logback-spring.groovy,logback.xml,logback.groovy。这里需要说明一下的是groovy有点类似于JVM,有兴趣的读者可以了解一下。
  • Log4j:支持log4j-spring.propreties,log4j-spring.xml,log4j.properties ,log4j.xml
  • Log4j2:支持log4j2-spring.xml,log4j2.xml
  • JDK :支持logging.properties

  在Spring Boot官方中推荐使用的是含有spring的文件名的配置。所以只需要在src/resource文件夹下创建logback-spring.xml文件就可以进行自定的配置了。注意,下面的配置只是用来演示,不推荐直接使用

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 日志存放路径 -->
    <property name="log.path" value="/home/ruoyi/logs" />
    <!-- 日志输出格式 -->
    <property name