2012-04-10 70 views
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),以便它是空的并为下一次运行做好准备。我怎样才能做到这一点?

N.b该程序是一个24小时的过程,使用调度程序来运行此作业。每次作业运行时都不重新启动。

回答

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背景

2

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

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"); 
相关问题