2012-04-10 31 views
0

Ich habe zwei Log-Dateien in einer Log-Datei eingerichtet.Wie lösche ich eine Log-Datei programmatisch?

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

In Java werden diese wie so ein:

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

und

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

Die erste ist die Standard-Anwendungsprotokolldatei ist. Die zweite speichert Daten, die das Programm von einer db abruft.

Das Programm vergleicht dann Daten innerhalb der Protokolldatei und sendet einige Ergebnisse. Nachdem dies abgeschlossen ist, möchte ich dieses Protokoll (Datendatei1) löschen, so dass es leer und bereit für den nächsten Lauf ist. Wie kann ich das machen?

N.b Das Programm ist ein 24-Stunden-Prozess, der einen Scheduler verwendet, um diesen Job auszuführen. Es wird nicht jedes Mal neu gestartet, wenn der Job ausgeführt wird.

Antwort

1

Ended bis diese mit:

public void resetLogs() { 

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

den LoggerContext Kontext aktualisieren

2

Scheint, dass Sie die Protokolldatei als Datenspeicher verwenden? Protokolldateien sind nicht dafür ausgelegt, daher gibt es keine Möglichkeit, sie zu löschen. Wenn Sie Daten an einem temporären Speicherort speichern möchten, öffnen Sie eine Datei zum Schreiben, protokollieren Sie sie nicht.

0

Sie können versuchen, Appender zu schließen und einen weiteren Appender zu Ihrer Logger hinzuzufügen. Hier ein Beispiel:

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