繁体   English   中英

使用 log4j2 删除通过滚动文件创建的文件时出现问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM