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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM