[英]Issue in deleting a file created by rolling file using log4j2
我已将 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();
}
}
}
}
我已经参考了很多关于 stackoverflow 的文章,但无法找出问题所在。 谁能帮助我了解第一个文件是如何生成的以及如何删除它?
任何帮助将不胜感激。 谢谢
我认为这是因为 fileName="${baseDir}/csvLog.csv" -> 是日志 output 的当前文件。 这是beyong删除历史。 文件 filePattern="${baseDir}/csvLog-%d{yyyy-MM-dd-HH-mm}.csv - 是用于滚动(重命名)的文件 - “归档日志文件”。每次将信息写入日志时the csvLog.csv will be created (if not exsits). And I suppose the first step is rolling and deleting, and only then csvLog.csv will be created. See here: https://logging.apache.org/log4j/2 .x/manual/appenders.html#RollingFileAppender
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.