Springboot 默认日志框架logback配置-动态获取变量

696 阅读2分钟

spring2.xx后默认支持logback日志框架。具体logback.xml日志文件怎么配置网上资料很多,我们不细述。

本片我们主要学习再logback.xml配置文件动态获取系统变量问题

springboot项目启动的时候,同样也会从默认路径加载固定名称的日志配置,常见的logback.xml和logback-spring.xml两个配置文件,我们对比下两个文件的区别

在 Spring Boot 中,logback-spring.xmllogback.xml 的加载顺序是由 Spring Boot 的默认配置决定的。加载的顺序如下:

  1. 尝试加载 logback-spring.xml

    • Spring Boot 首先尝试加载 logback-spring.xml 文件。
    • 如果存在 logback-spring.xml,Spring Boot 将使用该文件来配置 Logback。这个文件具有一些特殊的功能,包括对 Spring Profile 的支持。
  2. 如果 logback-spring.xml 不存在,尝试加载 logback.xml

    • 如果没有找到 logback-spring.xml,Spring Boot 将尝试加载 logback.xml
    • logback.xml 是 Logback 的默认配置文件,没有 Spring Boot 的特殊功能。它是一个传统的 Logback 配置文件。
  3. 如果两者都不存在,使用默认配置:

    • 如果两者都不存在,Spring Boot 将使用 Logback 的默认配置。

加载顺序的原因:

  • Spring Boot 选择加载 logback-spring.xml 主要是为了提供更多的集成和灵活性。这个文件可以根据 Spring Profile 进行定制,允许在不同的环境中使用不同的日志配置。
  • 如果 logback-spring.xml 不存在,Spring Boot 会回退到 logback.xml,以确保向后兼容传统的 Logback 配置文件。

这样的加载顺序确保了在 Spring Boot 项目中可以方便地定制日志配置,同时保持了向后兼容性。如果你需要在不同的环境中使用不同的日志配置,建议使用 logback-spring.xml,并结合 Spring Profile 进行配置。

下面看看我们使用logback-spring.xml怎么使用Spring Profile的功能


<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <springProperty scope="LOG_PATH" name ="LOG_PATH" source="file.dir"/>
<!--    <property name="LOG_PATH" value="${file.dir}}"/>-->
    <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
    <property name="LOG_STDOUT_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
    <property name="LOG_FILE_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>

    <!-- 输出到控制台 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 输出的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${LOG_STDOUT_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 日志名称 -->
        <file>${LOG_PATH}/spt-logback.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/jiu_largeScreen.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 日志最大 50MB -->
            <maxFileSize>50MB</maxFileSize>
            <!-- 保存 30 天 -->
            <maxHistory>30</maxHistory>
            <!--            <totalSizeCap>10GB</totalSizeCap>  &lt;!&ndash; 总日志大小 &ndash;&gt;-->
        </rollingPolicy>

        <encoder>
            <pattern>${LOG_FILE_PATTERN}</pattern>
        </encoder>
    </appender>
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>

</configuration>

我们使用springProperty标签方式,标签里面source对应application.yml的配置信息