2016-06-02 7 views
0

Ich baue eine Anwendung, die Protokolldateien tails. Dazu lese ich die Konfiguration der Datei logback.xml, wähle einen Appender nach dem Namen und entpacke die notwendigen Informationen der Datei zu Ende und formatiere die darin enthaltenen Nachrichten.Suche nach der Logdatei mit dem Logback-Appender

Momentan kann ich nur Protokolldateien mit einem festgelegten Dateinamen beenden, und ich versuche, Dateien mit einem strukturierten Dateinamen zu beenden. Aber um diese komplexe Prüfung aller möglichen Muster zu vermeiden, habe ich darüber nachgedacht, den Wert der Datei aus der Logger-Klasse selbst zu extrahieren. Nach der Untersuchung fand ich, dass die Klasse eine Methode namens getActiveFileName() hat, die ich vermute, dass was ich brauche (der Dateiname der Protokolldatei im Moment der Methode aufgerufen wird), aber aus irgendeinem Grund kann ich nicht einmal finde den Logger für seinen Namen. Wer hat schon mal so etwas probiert oder weiß, ob es überhaupt möglich ist?

Mein aktueller logback (die wichtigen Bits):

<appender name="DateRollingFileAppender"  class="ch.qos.logback.core.rolling.RollingFileAppender">  
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
    <fileNamePattern>logs/jwsgateway.%d{yyyyMMddHH}.log.zip</fileNamePattern> 
    <maxHistory>1500</maxHistory> 
</rollingPolicy> 
<encoder> 
    <pattern>%d{dd/MM/yy HH:mm:ss.SSS} [%thread] %-5level %logger{0} - %m%n  </pattern> 
</encoder>  

Mein aktueller Code:

private static ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger(MyClass.class); 
RollingFileAppender appender=(RollingFileAppender)logger.getAppender("DateRollingFileAppender"); 
filePath=appender.getRollingPolicy().getActiveFileName(); 

Die Variable "appender" endet null. Irgendwelche Vorschläge?

Antwort

1

Logger#getAppender(String) Ruft einen Appender auf, der aktuell an den Logger angehängt ist. Da "DataRollingFileAppender" zum Stammlogger angeschlossen ist, müssten Sie LoggerFactory#getLogger(String) auf Logger.ROOT_LOGGER_NAME anrufen, um den Logger zu erhalten, die Ihre appender enthalten würde:

import ch.qos.logback.classic.Logger; 
import ch.qos.logback.core.rolling.RollingFileAppender; 
import org.slf4j.LoggerFactory; 

public class Main { 
    public static void main(String[] args) { 
    Logger logger = (Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); 
    RollingFileAppender appender=(RollingFileAppender)logger.getAppender("DateRollingFileAppender"); 
    System.out.println(appender.getRollingPolicy().getActiveFileName()); 
    } 
} 
+0

Das machte. Es funktioniert wie beabsichtigt. Vielen Dank! – KatVolkov