träge Ausgabe des Logger

stso

Mitglied
Hallo,
ich habe ein Programm geschrieben was ca. 30 Sekunden läuft. Bisher habe ich an bestimmten Stellen Ausgaben auf der Konsole gemacht (ganz normal mit System.out.print... ). Diese Ausgaben will ich aber irgendwann nicht mehr auf dem Bildschirm haben aber in einer Datei.

Ich verwende dazu java.util.logging. Um die Ausgaben in eine Datei zu schreiben hab ich mir ein Logger-Objekt erzeugt und einen FileHandler hinzugefügt.


Code:
Logger logger = Logger.getLogger("test");
logger.setUseParentHandlers(false);		// keine Standardausgabe auf System.err

FileHandler fh = new FileHandler("test.log");
fh.setFormatter(formatter);
logger.addHandler(fh);

Alle "System.out.print..."- Ausgaben habe ich durch entsprechende "Logger.log(..." Methoden ersetzt. Das mit dem Schreiben in die Datei funktioniert auch ohne weiteres.

Code:
//System.out.println("test");
logger.log(Level.INFO, "test");

Nun möchte ich aber solange ich noch am Programm arbeite doch noch die Ausgaben über den Standard- Ausgabe- Stream auf der Konsole sehen. Dazu hab ich mir einen Streamhandler erzeugt dem ich den "System.out"- Stream übergeben habe.

Code:
StreamHandler sh = new StreamHandler(System.out,formatter);
logger.addHandler(sh);

Mein Problem ist nun das das Programm nahezu komplett durchlaufen muss, bis der Logger die erste Ausgabe in der Konsole erzeugt. Ich will aber nicht immer so "lange" warten müssen. Gibt es eine Möglichkeit die Ausgabe des Loggers zu beschleunigen?
 
Hallo,
der Eintrag ist zwar schon ein paar Tage alt aber ich hab inzwischen eine Lösung für das beschriebene Problem gefunden. Zumindest funktioniert diese für meine Zwecke.
Ich hab mir einfach einen eigenen StreamHeandler geschrieben der immer wenn ein Eintrag im Log erstellt wird den Inhalt des Stream- Puffers in den Stream schreibt.

Code:
/**
 * Stream- Handler für eine schnellere Ausgabe.
 * Überschreibt publish() und close() Methode der Klasse StreamHandler. Dies
 * ermöglicht sofortige Schreiben der gepufferten Daten im Ausgabe-Stream.
 * 
 * @author stso
 */
public class FasterStreamHandler extends StreamHandler
{
    
    public FasterStreamHandler()
    {
        super();
    }
    
    public FasterStreamHandler(OutputStream out, Formatter formatter)
    {
        super(out, formatter);
    }
    
    /**
     * Wird ein Eintrag ins Log geschrieben wird der Inhalt des Streams- Puffers
     * sofort geschrieben.
     */
    @Override
    public void publish(LogRecord record)
    {
        super.publish(record);
        this.flush();
    }
    
    /**
     * Abschließend wird der restliche Stream- Puffer- Inhalt geschrieben. Der
     * Stream wird jedoch nicht geschlossen.
     */
    @Override
    public void close()
    {
        this.flush();
    }
}
 
Zurück