Log4j配置:如何让max属性管控跨月份滚动日志文件
解决Log4j跨月日志文件不被max属性管控的问题
问题根源
默认的DefaultRolloverStrategy会根据filePattern中的时间模式(如yyyyMM)划分文件组,仅管控当前月份的归档日志文件,跨月后旧月份的文件不在匹配范围内,导致max属性只对当月文件生效。
配置方案
修改DefaultRolloverStrategy的配置,添加自定义删除规则,让它统计所有符合命名规则的归档日志,而非局限于当前月份:
<RollingRandomAccessFile name="default" fileName="${default.directory}/MY-APP.log" filePattern="${default.directory}/MY-APP.%d{yyyyMM}.%i.log"> <!-- 保留你的触发策略,比如按大小或时间触发,以下为示例 --> <SizeBasedTriggeringPolicy size="100MB"/> <DefaultRolloverStrategy max="5" fileIndex="nomax"> <Delete basePath="${default.directory}" maxDepth="1"> <IfFileName glob="MY-APP.*.log"/> <IfAccumulatedFileCount exceeds="5"/> </Delete> </DefaultRolloverStrategy> </RollingRandomAccessFile>
配置说明
fileIndex="nomax":关闭默认的按时间分片的索引分组逻辑,让策略不再局限于当前月份的文件组。<Delete>节点:定义全局删除规则:basePath="${default.directory}":指定日志文件所在目录。maxDepth="1":仅检查当前目录,不递归子目录。<IfFileName glob="MY-APP.*.log"/>:匹配所有以MY-APP.开头、.log结尾的归档日志(自动排除当前活跃的MY-APP.log)。<IfAccumulatedFileCount exceeds="5"/>:当符合条件的归档日志总数超过5时,自动删除最早生成的文件。
这样配置后,无论日志属于哪个月份,只要归档文件总数超过设定的max值,就会按文件生成顺序清理旧文件。
内容的提问来源于stack exchange,提问作者Felipe Issa
相关产品推荐
相关产品推荐

