记logback使用踩坑(client日志滚动问题)

best365中国官网 ⌚ 2026-01-30 00:01:50 👤 admin 👁️ 8414 ❤️ 452
记logback使用踩坑(client日志滚动问题)

场景需求

console client 日志记录业务场景如下:

error 日志单独记录到error.log

非error 日志记录到client.log

日志按照时间和大小进行滚动,且限制日志总量大小

原始配置

为满足以上日志打印需求,原始logback配置如下图所示:

image.png

发现问题

为验证日志滚动问题,将上图中的配置的500MB,改为50KB,并重启console client

现象描述:

(1)client.log 文件大小达到50KB后,不再有日志打印输出,且没有预期的滚动日志.zip产生

(2)前几次client 均可正常启动,重启几次后发现client 不能正常启动,且日志输出停留在如下所示的语句

2020-09-03-09:40:27.525 DEBUG [main]-org.springframework.boot.StartupInfoLogger:53>>Running with Spring Boot v2.1.0.RELEASE, Spring v5.1.2.RELEASE

2020-09-03-09:40:27.528 INFO [main]-org.springframework.boot.SpringApplication:675>>No active profile set, falling back to default profiles: default

经多次操作后,最终发现,前几次启动正常是因为,1\. 启动前删除了log文件所在目录 2\. client.log 的大小 < 50KB,两者均没有出发日志trigger的条件

解决问题

日志排查

根据日志显示“No active profile set, falling back to default profiles: default” 为spring boot 日志,且client jar 启动时,通过-Dspring.config.location参数指定了配置文件,因此,此日志不具备参考价值

logback 文档排查

(1)以下为官网中关于RollingFileAppender描述

可见RollingPolicy负责具体的rollover,TriggeringPolicy负责rollover的时机条件

在使用的时候,RollingFileAppender必须配置RollingPolicy和TriggeringPolicy,然而,如果RollingPolicy同时实现了TriggeringPolicy的接口,只配置RollingPolicy即可。

image.png

(2)关于SizeAndTimeBasedRollingPolicy的描述,fileNamePattern中的%i和%d是必须要配置的,且在当前的时间周期内日志文件的index从0开始递增

image.png

修改logback配置,进行尝试

查看SizeAndTimeBasedRollingPolicy的继承结构,发现实现了TriggeringPolicy接口,尝试去掉原始配置文件中的TriggeringPolicy。

重启验证,日志如期滚动和压缩

查看源码,找到根因

根据RollingFileAppender的描述,在trigger条件达到时,应该触发SizeAndTimeBasedRollingPolicy,且其本身实现的trigger也是对文件大小进行检查

logback版本:1.2.3

经过对源码的查看和跟踪发现:

虽然两种trigger下,rollover的策略都是使用的SizeAndTimeBasedFNATP的rollover,但

SizeBasedTriggeringPolicy检查rollover条件时,仅对文件大小进行比对

SizeAndTimeBasedFNATP检查rollover条件时,不仅对文件大小进行比对,同时还处理变量elapsedPeriodsFileName,即对上个滚动周期的日志文件名称进行处理,即对fileNamePattern进行处理,变量是进行日志rollover时的基础

所以当使用SizeBasedTriggeringPolicy触发时,此变量为空,导致日志不能正常rollover

结论

SizeAndTimeBasedRollingPolicy 和 SizeBasedTriggeringPolicy 不可同时使用,

SizeAndTimeBasedRollingPolicy内部依赖 SizeAndTimeBasedFNATP 已经实现了 TriggeringPolicy,无须单独配置

验证问题

最终配置如下图:

image.png

日志如期正常滚动

相关数据

生产企业制造费用怎么结转 3步骤解析生产企业制造费用如何高效结转

生产企业制造费用怎么结转 3步骤解析生产企业制造费用如何高效结转

生产企业在制造过程中涉及到的各种费用需要经过制造费用结转,才能确保成本核算的准确性和财务报表的清晰性。生产企业制造费用结转的三

10-05 best365中国官网
电脑系统要如何重装?重装系统的图文教程

电脑系统要如何重装?重装系统的图文教程

目前所能够购买的电脑基本都是预装的Win10系统,但在新的电脑使用的时间久了,也是会出现各式各样的问题,这个是时候去进行系统的重装可

10-02 365bet赌城
怎样学白话(学白话最快的方法跟读)

怎样学白话(学白话最快的方法跟读)

如何学白话(快速掌握日常口语表达技巧) 1、快速掌握日常口语表达技巧的关键在于多听、多说、多模仿和实践。首先,多听是学习的基础。你可

08-13 365bet赌城
现在魔兽怀旧服还能赚钱吗?我:每月挣1万+RMB

现在魔兽怀旧服还能赚钱吗?我:每月挣1万+RMB

现在魔兽世界怀旧服还能赚钱吗?一天能赚多少rmb?我今天想很深入的来讨论一下你这个问题。 讲之前,我们先来看一个事情。 一个人,从魔

07-25 best365中国官网
宜人贷3.0:升级服务,焕新体验

宜人贷3.0:升级服务,焕新体验

宜人贷作为中国领先的在线金融服务平台,一直致力于为用户提供便捷、高效、安全的借款服务。随着金融科技的不断发展和用户需求的日益多

10-16 365bet现场走地盘
考研英语用哪个app比较好

考研英语用哪个app比较好

下载 考虫单词(考虫英语单词app手机版) 2021-10-1351KB v2.8.0完整版 推荐理由:考虫英语单词app手机版是专为广大考研备考生打造的英语学习软件,

08-09 365bet现场走地盘