惊雷无声 发表于 2024-10-30 16:44:38

springboot3配置日志logback

当前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 并去除不兼容的文件命名模式,可以顺遂解决这些问题,使日志体系恢复正常运行。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: springboot3配置日志logback