log4j2 xml配置下maxHistory标签无效无法清理历史日志问题咨询
报错原因
- 配置位置错误:
maxHistory不属于<Policies>标签的合法子元素。<Policies>标签仅用于定义触发日志滚动的规则(如按时间滚动、按大小滚动),不能放置日志清理相关的配置。 - 配置规则混淆:该写法是Logback框架的配置规则,你直接套用到了Log4j2上,Log4j2本身不支持直接使用
<maxHistory>标签配置历史日志保留时长,需要通过专门的删除动作实现。
正确配置方案
首先删除<Policies>标签内的<maxHistory>30</maxHistory>配置,再修改<DefaultRolloverStrategy>段,添加自动删除规则即可,完整的RollingFile配置如下:
<RollingFile name="AppFile" fileName="/app/logs/test.log" filePattern="/app/logs/archive/test-%d{yyyy-MM-dd-HH}-%i.log"> <PatternLayout> <pattern>%d [%t] %p %c - %m%n</pattern> </PatternLayout> <Policies> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> <SizeBasedTriggeringPolicy size="500 MB" /> </Policies> <!-- 修改后的滚动策略,添加30天自动清理规则 --> <DefaultRolloverStrategy max="10"> <Delete basePath="/app/logs/archive" maxDepth="1"> <!-- 匹配要清理的日志文件名格式 --> <IfFileName glob="test-*.log" /> <!-- 仅删除修改时间超过30天的文件 --> <IfLastModified age="30d" /> </Delete> </DefaultRolloverStrategy> </RollingFile>
配置说明
basePath:填你日志归档文件的存放目录,和你filePattern中配置的归档路径保持一致即可maxDepth:指定目录扫描深度,1代表只扫描目标目录下的一级文件,不会递归扫描子目录IfFileName glob:匹配需要清理的日志文件名规则,和你定义的归档文件命名规则对应IfLastModified age:配置日志最长保留时长,30d代表保留最近30天的日志,超过时长的日志会被自动删除,也可根据需求换用h(小时)、m(分钟)等单位- 原有
max="10"属性保留即可,该属性代表同一个时间窗口(你当前配置是1小时)内最多保留的日志切片数量,避免单小时内日志量过大产生过多切片文件
内容的提问来源于stack exchange,提问作者Aditya
相关产品推荐
相关产品推荐

