2012-04-10 4 views
0

У меня есть два файла журнала в файле журнала.Как очистить файл журнала программно?

<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"); 

Первый стандартный файл журнала приложений. Второй хранит данные, которые программа возвращает из db.

Затем программа сравнивает данные в файле журнала и отправляет некоторые результаты. По завершении этого я хотел бы очистить этот журнал (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

Вы можете попытаться закрыть приложение и добавить еще одно приложение в свой 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"); 
Смежные вопросы