log4j2 自动删除日志目录及文件

原因:

通常的log4j2配置文件如下,注意delete插件这个element,一般只是展示一个配置

现象:

这样的配置就会出现一个问题,具体日志文件的上父目录没有被删除

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
  <Properties>
    <Property name="baseDir">logs</Property>
  </Properties>
  <Appenders>
    <RollingFile name="RollingFile" fileName="${baseDir}/app.log"
          filePattern="${baseDir}/$${date:yyyy-MM}/app-%d{yyyy-MM-dd}.log.gz">
      <PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
      <CronTriggeringPolicy schedule="0 0 0 * * ?"/>
      <DefaultRolloverStrategy>
        <Delete basePath="${baseDir}" maxDepth="2">
          <IfFileName glob="*/app-*.log.gz" />
          <IfLastModified age="P60D" />
        </Delete>
      </DefaultRolloverStrategy>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>

原因:

但查看org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy#createStrategy这个函数

由于配置文件被解析后,通过该函数进行构建对应的strategy,入参函数action是一个数组,所以可以传递多个action行为。

解决办法:

如果需要删除basePath下的由log4j2按年月日自动生成的目录,需要再指定一个action,并且他的maxDepth为basePath到该目录的层级数,以上面配置为例,则maxDepth为1

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <Configuration status="warn" name="MyApp" packages="">
 3   <Properties>
 4     <Property name="baseDir">logs</Property>
 5   </Properties>
 6   <Appenders>
 7     <RollingFile name="RollingFile" fileName="${baseDir}/app.log"
 8           filePattern="${baseDir}/$${date:yyyy-MM}/app-%d{yyyy-MM-dd}.log.gz">
 9       <PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
10       <CronTriggeringPolicy schedule="0 0 0 * * ?"/>
11       <DefaultRolloverStrategy>
12         <Delete basePath="${baseDir}" maxDepth="2">
13           <IfFileName glob="*/app-*.log.gz" />
14           <IfLastModified age="P60D" />
15         </Delete>
16         <Delete basePath="${baseDir}" maxDepth="1">
17           <IfLastModified age="P60D" />
18         </Delete>
19       </DefaultRolloverStrategy>
20     </RollingFile>
21   </Appenders>
22   <Loggers>
23     <Root level="error">
24       <AppenderRef ref="RollingFile"/>
25     </Root>
26   </Loggers>
27 </Configuration>

 

上一篇:测试用例(126邮箱,电话号,手机号,微信支付,微信发布,qq登录,模糊查询用户登录)


下一篇:蓝桥杯第十一讲--双指针【例/习题】