扣扣技术分享交流群:1125844267
背景:搭了一个maven项目,只有一个main方法,然后打成一个jar包以供别的程序去启动执行。项目中配置了logback日志策略,但是在生产环境下发现日志可以正常生成,但是没有删除历史日志,设置的只记录近期30天的日志信息。
![](https://img-blog.csdnimg.cn/20210303141000426.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMTU3ODk2,size_16,color_FFFFFF,t_70)
思路:
因为这个main方法执行完,整个进程就没有了,可能会在很短的时间内就执行完了,这和一直运行的服务还是不一样的。那么可能就是日志还没来得及清理进程就没有了。那么有没有一种配置可以让日志清理在项目刚刚运行时立马执行?查了一下是可以的,如下配置:
![](https://img-blog.csdnimg.cn/20210303141953493.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMTU3ODk2,size_16,color_FFFFFF,t_70)
查看源码可以看到,会有一个对这个变量的判断。如果为true,那么会立马创建线程池定时任务来处理清理工作
![](https://img-blog.csdnimg.cn/2021030314220734.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMTU3ODk2,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20210303142437918.png)
![](https://img-blog.csdnimg.cn/20210303142748131.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMTU3ODk2,size_16,color_FFFFFF,t_70)
注意:在跟源码的时候发现一个点,就是它不会将设定值之前的所有历史日志都删除,有个32的界限值(没发现有变动过)。如果设定的是保留30天的日志,那么30天-62天之间的历史日志会被删除,如果是62天之前的就不会被删除