当前springboot版本为3.3.4之后版本  与之前版本配置不同

1.引入依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
            <version>3.3.4</version>
        </dependency>

2.配置文件

application.yml

logging:
  file:
    name: spring_log.log
    path: ./logs
  config: classpath:logback-spring.xml

src/main/resources下logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!-- SpringBoot默认logback的配置 -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <springProperty scope="context" name="logName" source="logging.file.name"/>
    <springProperty scope="context" name="logPath" source="logging.file.path"/>
<!--    <property name="LOG_HOME" value="/logs/${logName}"/>-->

    <!-- 1. 输出到控制台 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 2. 输出到文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/${logName}</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} -%5level ---[%15.15thread] %-40.40logger{39} : %msg%n%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 使用SizeAndTimeBasedRollingPolicy替代旧的策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 滚动后的日志文件命名模式 -->
            <fileNamePattern>${logPath}/%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <!-- 日志文件的最大大小 -->
            <maxFileSize>10MB</maxFileSize>
            <!-- 最大保留30天的日志 -->
            <maxHistory>30</maxHistory>
            <!-- 总日志文件大小不超过3GB -->
            <totalSizeCap>3GB</totalSizeCap>
        </rollingPolicy>
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>INFO</level>
            </filter>
    </appender>

<!--    &lt;!&ndash; 开发环境输出至控制台 &ndash;&gt;-->
<!--    <springProfile name="dev">-->
<!--        <root level="INFO">-->
<!--            <appender-ref ref="CONSOLE"/>-->
<!--            <appender-ref ref="FILE"/>-->
<!--        </root>-->
<!--    </springProfile>-->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>
<!--    &lt;!&ndash; 生产环境输出至文件 &ndash;&gt;-->
<!--    <springProfile name="prod">-->
<!--        <root level="INFO">-->
<!--            <appender-ref ref="CONSOLE"/>-->
<!--            <appender-ref ref="FILE"/>-->
<!--        </root>-->
<!--    </springProfile>-->

</configuration>

修改内容说明:

使用 SizeAndTimeBasedRollingPolicy:   

        该策略同时支持按时间和文件大小滚动日志。与旧的 TimeBasedRollingPolicy 类相比,它是更推荐的滚动策略。

文件命名模式调整:        

        在 fileNamePattern 中,使用 %d{yyyy-MM-dd}-%i.log 作为文件名格式,这允许日志按照日期命名,并在同一天滚动日志时通过 %i 生成分片文件(如 2024-10-01-1.log, 2024-10-01-2.log 等)。

限制日志大小和保留时间

        maxFileSize 设置为 10MB,表示单个日志文件的最大大小。
        maxHistory 设置为 30,表示最多保留30天的日志文件。
        totalSizeCap 设置为 3GB,表示日志总大小不能超过 3GB。达到该限制时,将删除最早的日志文件。
总结
在 Spring Boot 升级至 3.3.4 后,由于底层 Logback 版本的更新,原先使用的 TimeBasedRollingPolicy 类和日志文件名中的 %i 令牌会引发兼容性问题。通过调整日志回滚策略,使用新的 SizeAndTimeBasedRollingPolicy 并去除不兼容的文件命名模式,可以顺利解决这些问题,使日志系统恢复正常运行。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部