SpringBoot3配置Logback日志滚动文件的方法

 更新时间:2024年08月07日 09:54:21   作者:辛丑年正月十五  
本文介绍了在SpringBoot3中配置Logback日志滚动文件的方法,因为SpringBoot3内置的logback版本是1.4.14,之前使用SpringBoot2.1.5的logback配置发现有些东西不能生效了,需要的朋友可以参考下

简介

本文介绍了在SpringBoot3中配置Logback日志滚动文件的方法,因为SpringBoot3内置的logback版本是1.4.14,之前使用SpringBoot2.1.5的logback配置发现有些东西不能生效了

环境

SpringBoot v3.3.2

内置的logback-core为1.4.14

正文

<configuration debug="false" scan="true" scanPeriod="10 seconds">
</configuration>

当我在使用SpringBoot内置的logback时,我希望在configuration标签中自定义日志文件扫描大小的时间,于是我使用了以上配置,但无论如何就是不生效。百度了很久,发现都是这么教配置的,于是我怀疑是我的SpringBoot版本过高从而内置的logback版本已经发生变更从而配置也发生了变更。

于是我另起了一个项目,将SpringBoot版本设置为2.1.5,发现以上配置可以生效。

但是我总不能因为一个日志功能而降低SpringBoot版本吧?

最后查阅官方文档,发现了这么个东西

释义:自1.3.12/1.4.12以来,鉴于检查文件大小是一项相对昂贵的操作,默认情况下每60秒执行一次。但是,您可以将不同的检查增量设置为持续时间。 

于是将logback-spring.xml的配置改成了这样

为什么是改成这样?看一段代码就明白了

TimeBasedRollingPolicy类中持有了一个TimeBasedFileNamingAndTriggeringPolicy对象,而TimeBasedFileNamingAndTriggeringPolicyBase是一个抽象类,SizeAndTimeBasedFNATP是TimeBasedFileNamingAndTriggeringPolicyBase的一个实现

 再来看一遍配置

解释:

1、ch.qos.logback.core.rolling.TimeBasedRollingPolicy 是基于时间的滚动策略实现类,该类继承了ch.qos.logback.core.rolling.RollingPolicyBase类,而 fileNamePattern就是该父类中的属性

官网文档中的说明,fileNamePattern是必须的属性

2、timeBasedFileNamingAndTriggeringPolicy是TimeBasedRollingPolicy中的一个接口对象,而ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP是该接口的实现类

3、maxFileSize和checkIncrement是SizeAndTimeBasedFNATP类的属性,分别代表着单个文件的存储量和日志文件的扫描时间,单位是毫秒,这里的10000毫秒也就是10秒钟扫描一次

至此问题得到了解决,下面是测试成功的日志文件列表 

说明(重要) 依据时间的文件生成触发策略只能保证当到了checkIncrement的时间后开始扫描当前日志文件的大小,当数据量超过了maxFileSize,则生成新的文件。

这也就意味着,如果在checkIncrement时间内有高频率的接口调用,那么当前日志的数据量是会超过maxFileSize的配置的。只能说以较高的扫描频率去防止单文件生成更多的数据量。

以上就是SpringBoot3配置Logback日志滚动文件的方法的详细内容,更多关于SpringBoot3 Logback滚动文件的资料请关注脚本之家其它相关文章!

相关文章

  • Spring中的Devtools源码解析

    Spring中的Devtools源码解析

    这篇文章主要介绍了Spring中的Devtools源码解析,Spring中的Devtools是一个开发工具,旨在提高开发人员的生产力和开发体验,它提供了一系列功能,包括自动重启、热部署、远程调试等,使开发人员能够更快速地进行代码修改和调试,需要的朋友可以参考下
    2023-10-10
  • springboot中redis的缓存穿透问题实现

    springboot中redis的缓存穿透问题实现

    这篇文章主要介绍了springboot中redis的缓存穿透问题实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 详解Java设计模式编程中的里氏替换原则

    详解Java设计模式编程中的里氏替换原则

    这篇文章主要介绍了Java设计模式编程中的里氏替换原则,有这个名字是因为这是由麻省理工学院的一位姓里的女士Barbara Liskov提出来的(嗯...),需要的朋友可以参考下
    2016-02-02
  • Java开发中的容器概念、分类与用法深入详解

    Java开发中的容器概念、分类与用法深入详解

    这篇文章主要介绍了Java开发中的容器概念、分类与用法,结合实例形式较为详细的分析了java容器的相关概念、分类、使用方法与注意事项,需要的朋友可以参考下
    2017-11-11
  • Java中Scanner的使用及nextLine和nextInt等混用报错解决方案

    Java中Scanner的使用及nextLine和nextInt等混用报错解决方案

    Scanner类用于从控制台输入数据,常用方法包括next()、nextLine()、nextInt()、nextDouble()和nextBoolean(),案例测试和常见错误情况分析表明,nextDouble等方法不会跳过空格和回车,而nextLine会读取整行并跳到下一行
    2026-03-03
  • 如何使用ActiveMQ中间件方式发送邮件

    如何使用ActiveMQ中间件方式发送邮件

    这篇文章主要介绍了如何使用ActiveMQ中间件方式发送邮件的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Spring过滤器中OncePerRequestFilter应用实现

    Spring过滤器中OncePerRequestFilter应用实现

    OncePerRequestFilter是Spring框架提供的一个过滤器基类,本文就来介绍一下Spring过滤器中OncePerRequestFilter应用实现,感兴趣的可以了解一下
    2024-12-12
  • JavaWeb实现Session跨页面传递数据

    JavaWeb实现Session跨页面传递数据

    本文主要介绍了 JavaWeb实现Session跨页面传递数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 透彻理解Java中Synchronized(对象锁)和Static Synchronized(类锁)的区别

    透彻理解Java中Synchronized(对象锁)和Static Synchronized(类锁)的区别

    这篇文章主要介绍了Java中Synchronized(对象锁)和Static Synchronized(类锁)的区别,希望对大家有所帮助,一起跟随小编过来看看吧
    2018-05-05
  • 深入了解Java定时器中的Timer的原理

    深入了解Java定时器中的Timer的原理

    这篇文章主要介绍了Java定时器中的Timer的原理。Timer主要用于Java线程里指定时间或周期运行任务,它是线程安全的,但不提供实时性(real-time)保证。接下来就跟随小编一起深入了解Timer吧
    2022-01-01

最新评论