0

我在 logback 文件中设置了两个日志文件。

<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
              <fileNamePattern>/opt/loghome/${instance}/recon.%d{MM-dd-yyyy}.log.zip
              </fileNamePattern>
              <maxHistory>30</maxHistory>
        </rollingPolicy>
        <append>false</append>
        <encoder>
              <pattern>%d{MM/dd/yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%X{User} %msg%n</pattern>
        </encoder>
  </appender>

  <appender name="datafile1" class="ch.qos.logback.core.FileAppender">
        <file>/opt/loghome/datafiles/file1.log</file>
        <append>false</append>
        <encoder>
              <pattern>%msg%n</pattern>
        </encoder>
  </appender>

在java中,这些设置如下:

private static final Logger logger = LoggerFactory
              .getLogger(Main.class);

private static final Logger logger = LoggerFactory
              .getLogger("datafile1");

第一个是标准应用程序日志文件。第二个存储程序从数据库中检索的数据。

然后程序比较日志文件中的数据并发送一些结果。完成后,我想清除此日志(datafile1),使其为空并为下一次运行做好准备。我怎样才能做到这一点?

注意,该程序是一个 24 小时进程,它使用调度程序来运行此作业。它不会在每次运行作业时重新启动。

4

3 回答 3

2

似乎您将日志文件用作数据存储?日志文件不是为此而设计的,因此实际上没有办法清除它们。如果要将数据存储在临时位置,请打开一个文件进行写入,不要记录它。

于 2012-04-10T16:56:39.673 回答
1

最终使用了这个:

    public void resetLogs() {

    LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); 
    ContextInitializer ci = new ContextInitializer(lc); 
    lc.reset();
    try {   
        ci.autoConfig();  
    } catch (JoranException e) {  
        e.printStackTrace(); 
    }
}

刷新 LoggerContext 上下文

于 2012-04-11T16:11:03.730 回答
0

您可以尝试关闭 appender 并将另一个 appender 添加到您的Logger. 这里有一个例子:

Logger logger = Logger.getLogger("datafile1");
logger.setLevel(Level.ALL);

FileAppender appender = new FileAppender(new PatternLayout("%msg%n"), "/logs/datafile", false);
Logger.getRootLogger().addAppender(appender);

// log data
logger.info("info1");

// here you remove and close the old appender
Logger.getRootLogger().removeAppender(appender);
appender.close();

// replace with a new one appender
appender = new FileAppender(new PatternLayout("%msg%n"), "/logs/datafile", false);
Logger.getRootLogger().addAppender(appender);

// log new data
logger.info("info2");
于 2012-04-10T17:20:01.903 回答