You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring定时任务中Logback每次触发@Scheduled都生成新日志文件的问题求助

Spring定时任务中Logback每次触发@Scheduled都生成新日志文件的问题求助

你好呀!我看了你的问题和配置,现在就来帮你解决Logback每次定时任务触发就生成新日志文件的问题。

首先咱们先分析下为什么会出现这个情况:
你的application.yml里,Logback的滚动策略配置了file-name-pattern: logs/${logging.file.name}.%d{yyyy-MM-dd_HH-mm-ss}.%i.log,这里用了秒级的时间戳(HH-mm-ss)。Logback的时间滚动策略会根据你指定的时间粒度来触发日志文件切换,当时间走到下一个秒级单位时,就会自动生成新的日志文件。而你的定时任务是每5秒执行一次,每次执行的时间刚好跨过了秒数,所以每次任务触发时都会触发Logback的时间滚动,生成新的带秒级时间戳的日志文件。另外那个application.log是Logback在应用关闭时,把缓冲区剩余的日志写入的默认文件。

接下来给你两种解决方案,你可以根据自己的需求选择:

方案一:整个应用生命周期只用单个日志文件(不滚动)

如果你不需要日志文件滚动(不管文件大小,从应用启动到停止只写一个文件),那可以直接去掉Logback的滚动策略配置,简化你的日志配置:

logging:
  file:
    name: "logs/application.log"  # 直接指定完整的日志文件路径和名称
  level:
    root: info

这样配置后,所有日志都会写入logs/application.log,直到应用停止,不会生成任何额外的带时间戳的日志文件。

方案二:仅当文件达到指定大小才滚动(保留滚动但去掉时间触发)

如果你希望日志文件在达到指定大小后才滚动(比如超过10MB时生成新的序号文件),但不想因为时间或者定时任务触发滚动,那可以修改滚动策略的文件名模板,去掉时间戳部分:

logging:
  file:
    name: "application"
    path: "logs/"
  logback:
    rollingpolicy:
      max-history: 90
      file-name-pattern: logs/${logging.file.name}.%i.log  # 去掉时间戳,只用序号区分滚动文件
      max-file-size: 10MB
  level:
    root: info

这样配置后,只有当当前日志文件超过10MB时,才会生成application.1.log、application.2.log这样的滚动文件,而定时任务触发时不会再生成新的日志文件,整个应用周期内的日志都会先写入application.log,达到大小后才滚动。

最后再提醒下:如果你之前的配置里还有其他Logback的XML配置文件,记得检查一下有没有冲突的配置,确保application.yml里的配置是生效的哦。

备注:内容来源于stack exchange,提问作者user10261018

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 20:13:13