Java 使用OnStartupRiggeringPolicy和DirectWriteRolloverStrategy删除旧日志文件
我正在使用log4j-slf4j-impl版本2.12.1。 以及一个将通过命令行执行并在完成后终止的应用程序 该应用程序不会在本地主机上同时执行多次,但我们可以在上一个应用程序运行时再次运行它。 因此,我想按yyyyMMdd HHmmss分隔日志文件,然后在应用程序启动时,如果文件修改时间超过指定的时间(这里我设置为1分钟用于测试),则删除这些文件 我的log4j2.xml内容:Java 使用OnStartupRiggeringPolicy和DirectWriteRolloverStrategy删除旧日志文件,java,log4j2,Java,Log4j2,我正在使用log4j-slf4j-impl版本2.12.1。 以及一个将通过命令行执行并在完成后终止的应用程序 该应用程序不会在本地主机上同时执行多次,但我们可以在上一个应用程序运行时再次运行它。 因此,我想按yyyyMMdd HHmmss分隔日志文件,然后在应用程序启动时,如果文件修改时间超过指定的时间(这里我设置为1分钟用于测试),则删除这些文件 我的log4j2.xml内容: 日志文件如下所示: my.20191127-091410.log my.20191127-091415.lo
日志文件如下所示:
- my.20191127-091410.log
- my.20191127-091415.log
- my.20191127-091527.log
- my.20191127-091533.log
我的测试申请是
公共类库{
私有静态最终记录器log=LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
公共静态void main(字符串[]args)引发InterruptedException{
日志信息(“Hi”);
对于(int i=0;i<5;i++)
{
时间单位。秒。睡眠(1);
log.info(“{}”,i);
}
}
}
已正确删除旧文件,但每秒将创建新日志文件。
根据我的测试应用程序,创建了6个文件:
- my.20191203-160338.log包含“Hi”
- my.20191203-160339.log包含“0”
- my.20191203-160340.log包含“1”
- my.20191203-160341.log包含“2”
- my.20191203-160342.log包含“3”
- my.20191203-160343.log包含“4”
非常感谢。我尝试在本地运行此程序(不是并行运行),并通过将
更改为
来删除超过一分钟的日志文件
通过这种配置,每秒都会创建一个新文件(我的程序在无限循环中每秒创建一次log.info()
一分钟后,最旧的文件被删除,我的文件夹中从来没有超过61个文件。
只要根据您的需要调整配置(每分钟一个文件等),您就可以开始了。谢谢,但每分钟一个文件不符合我的要求,因为一分钟内可以执行多个应用程序。每个正在运行的应用程序都必须将日志写入自己的文件。如果有任何想法,请告诉我,谢谢。解决方案不是“每分钟一个文件”。我的解决方案是根据请求触发旧文件的删除。请像我在回答中写的那样调整配置,并测试文件是否被删除。嗨,我更新了我的帖子,请查看结果。非常感谢。