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}.">
<PatternLayout pattern="%d %p %c{1.} [%t] %m%n"/>
<CronTriggeringPolicy schedule="0 0 0 * * ?"/>
<DefaultRolloverStrategy>
<Delete basePath="${baseDir}" maxDepth="2">
<IfFileName glob="*/app-*."/>
<IfLastModified age="P60D"/>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
原因:
但查看org.apache.lling.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}.">
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-*."/>
14<IfLastModified age="P60D"/>
15</Delete>
16        <Delete basePath="${baseDir}" maxDepth="1">
17          <IfLastModified age="P60D" />
18        </Delete>
19</DefaultRolloverStrategy>
20</RollingFile>
21</Appenders>
log4j2不打印日志
22<Loggers>
23<Root level="error">
24<AppenderRef ref="RollingFile"/>
25</Root>
26</Loggers>
27</Configuration>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。