我已经将log4j2.xml文件配置为删除要删除的超过2分钟(用于测试)的文件。这很好,但我无法删除生成的第一个文件。滚转后,所有文件都将被删除。
我已经附上了一个项目文件夹结构的图片。您可以在日志文件夹中看到2个日志文件。第一个日志文件不会被删除,因为它创建的时间只有3-4毫秒,而且它也不是以指定的格式生成的。

这是我的log4j2.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace">
<Properties>
<Property name="csvLog.fileName">csvLog</Property>
<Property name="file-header">sender,flow,message</Property>
<Property name="baseDir">logs</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout
pattern="%d{yyyy-MM-dd} %-5p %c{1}:%L - %m%n" />
</Console>
<RollingFile name="csvFile"
fileName="${baseDir}/csvLog.csv"
filePattern="${baseDir}/csvLog-%d{yyyy-MM-dd-HH-mm}.csv">
<CsvParameterLayout delimiter="," header="${file-header}\n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
<!-- <SizeBasedTriggeringPolicy size="1 KB" /> -->
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="${baseDir}" maxDepth="1">
<IfFileName glob="csvLog*.csv" />
<IfLastModified age="2m" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="CSVLOG" level="debug" additivity="false">
<appender-ref ref="csvFile" level="debug"/>
</Logger>
<Root level="debug" additivity="false">
<AppenderRef ref="Console" level="debug"/>
</Root>
</Loggers>
</Configuration>这是我的踪迹:
2022-03-28 23:31:17,343 main TRACE PatternProcessor.getNextTime returning 2022/03/28-23:32:00.000, nextFileTime=2022/03/28-23:31:00.000, prevFileTime=2022/03/28-23:30:00.000, current=2022/03/28-23:31:17.343, freq=EVERY_MINUTE
2022-03-28 23:31:17,345 main TRACE DefaultRolloverStrategy.purge() took 1.0 milliseconds
2022-03-28 23:31:17,345 main DEBUG RollingFileManager executing synchronous FileRenameAction[logs\csvLog-%d{yyyy-MM-dd-HH-mm}.csv to logs\csvLog-2022-03-28-23-30.csv, renameEmptyFiles=false]
2022-03-28 23:31:17,348 main TRACE Renamed file C:\Users\Pakalu\OneDrive\Desktop\CSV_Log\CSVlog\logs\csvLog-%d{yyyy-MM-dd-HH-mm}.csv to C:\Users\Pakalu\OneDrive\Desktop\CSV_Log\CSVlog\logs\csvLog-2022-03-28-23-30.csv with Files.move
2022-03-28 23:31:17,348 main DEBUG RollingFileManager executing async CompositeAction[DeleteAction[basePath=logs, options=[], maxDepth=1, conditions=[IfFileName(glob:csvLog*.csv), IfLastModified(age=PT2M)]]]
2022-03-28 23:31:17,349 Log4j2-2 DEBUG Starting DeleteAction[basePath=logs, options=[], maxDepth=1, conditions=[IfFileName(glob:csvLog*.csv), IfLastModified(age=PT2M)]]
2022-03-28 23:31:17,349 Log4j2-2 DEBUG DeleteAction complete in 7.6E-4 seconds
2022-03-28 23:31:17,350 Log4j2-2 TRACE Sorted paths:
2022-03-28 23:31:17,350 Log4j2-2 TRACE logs\csvLog-%d{yyyy-MM-dd-HH-mm}.csv (modified: 2022-03-28T18:01:17.3480474Z)
2022-03-28 23:31:17,350 Log4j2-2 TRACE logs\csvLog-2022-03-28-23-30.csv (modified: 2022-03-28T18:00:17.3403012Z)
2022-03-28 23:31:17,350 Log4j2-2 TRACE logs\csvLog-2022-03-28-23-29.csv (modified: 2022-03-28T17:59:17.3259106Z)
2022-03-28 23:31:17,350 Log4j2-2 TRACE IfFileName ACCEPTED: 'glob:csvLog*.csv' matches relative path 'csvLog-%d{yyyy-MM-dd-HH-mm}.csv'
2022-03-28 23:31:17,351 Log4j2-2 TRACE IfLastModified REJECTED: csvLog-%d{yyyy-MM-dd-HH-mm}.csv ageMillis '2' < 'PT2M'
2022-03-28 23:31:17,351 Log4j2-2 TRACE Not deleting base=logs, relative=csvLog-%d{yyyy-MM-dd-HH-mm}.csv
2022-03-28 23:31:17,351 Log4j2-2 TRACE IfFileName ACCEPTED: 'glob:csvLog*.csv' matches relative path 'csvLog-2022-03-28-23-30.csv'
2022-03-28 23:31:17,351 Log4j2-2 TRACE IfLastModified REJECTED: csvLog-2022-03-28-23-30.csv ageMillis '60011' < 'PT2M'
2022-03-28 23:31:17,351 Log4j2-2 TRACE Not deleting base=logs, relative=csvLog-2022-03-28-23-30.csv
2022-03-28 23:31:17,351 Log4j2-2 TRACE IfFileName ACCEPTED: 'glob:csvLog*.csv' matches relative path 'csvLog-2022-03-28-23-29.csv'
2022-03-28 23:31:17,351 Log4j2-2 TRACE IfLastModified ACCEPTED: csvLog-2022-03-28-23-29.csv ageMillis '120026' >= 'PT2M'
2022-03-28 23:31:17,352 Log4j2-2 TRACE Deleting logs\csvLog-2022-03-28-23-29.csv这是我的主要文件:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
public class App {
private static final Logger csvlogger = LogManager.getLogger("CSVLOG");
private static final Logger logger = LogManager.getLogger();
public static void main(String args[]){
SpringApplication.run(App.class);
csvlogger.info("Debug Message", "Namaste", "Whats up", "hmm..ok");
logger.info("You have made an error");
logger.debug("Debug Message");
runMe("test");
}
private static void runMe(String parameterParam){
String parameter;
for(int i=0; i<100; ++i) {
parameter = parameterParam + i;
System.out.println("log iteration: "+i);
if (csvlogger.isDebugEnabled()) {
csvlogger.debug(new ObjectArrayMessage("JD", "Ri", parameter));
}
if (csvlogger.isInfoEnabled()) {
csvlogger.info(new ObjectArrayMessage("JD", "Ri", parameter));
}
csvlogger.info(new ObjectArrayMessage("JD", "Ri", parameter));
csvlogger.info(new ObjectArrayMessage("JD", "Ri", parameter));
csvlogger.info(new ObjectArrayMessage("JD", "Ri", parameter));
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}我参考了很多关于堆叠溢出的文章,但都找不出问题。有人能帮我了解第一个文件是如何生成的,以及如何删除它吗?
任何帮助都将不胜感激。谢谢!
发布于 2022-07-27 18:00:25
我认为这是因为fileName="${baseDir}/csvLog.csv“->是日志输出的当前文件。它超越了删除历史。文件filePattern="${baseDir}/csvLog-%d{yyyy-MM-dd-HH-mm}.csv --是用于滚动(重命名)的文件--“归档日志文件”。每次向日志中写入信息时,都会创建csvLog.csv (如果不存在的话)。我认为第一步是滚动和删除,只有这样才能创建csvLog.csv。
https://stackoverflow.com/questions/71651775
复制相似问题