home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  mindmailer 

Logging

Ein Logger bietet dem Programmierer deutlich mehr Möglichkeiten die Ausgaben eines Programms zu variieren. Es kann dort definiert werden, wo die Meldungen ausgegeben werden (Konsole, Schreiben in Datei....), man kann beeinflussen, welche Meldungen tatsächlich ausgegeben werden oder auch die Nachrichten vor der Ausgaben formatieren.

 

Die Filterung, welche Nachrichten ausgegeben werden geschieht über sogenannte LogLevels. Es gibt folgende LogLevel:

  • severe
  • warn
  • info
  • debug
  • fine
  • finer
  • finest

Jeder Meldung, die man dem Logger übergibt, fügt man ein LogLevel hinzu. Das ist entweder möglich direkt über die zum LogLevel zugehörige Methode oder als Übergabeparameter auf der log()-Methode.

logger.severe("Schhade ein Fehler");
logger.log(Level.SEVERE, "Schade ein Fehler", e);

Um jetzt zu entscheiden, wieviele Nachrichten man ausgeben will, also wie detailliert sollen meine Informationen sein, wird die Methode setLevel() auf dem Logger genutzt. Als Übergabeparameter werden die static Attribute der Klasse Level genutzt.
logger.setLevel(Level.INFO);

Der Übergabeparameter gibt ab welchem Level der Nachrichten, diese ausgegeben werden. Es werden hier also nicht nur Nachrichten mit dem Level "info" ausgegeben sondern auch alle Nachrichten mit übergeordneteren ("wichtigeren") Leveln.

Bei der Arbeit mit einem Logger ist es unkompliziert Formatierungen der Meldungen anzugeben. Dafür steht die Methode addHandler() zur Verfügung. Dieser Methode wird ein Handler, z.B. ein FileHandler, vom Typ java.util.logging.Handler übergeben. Dieser Handler kann wiederrum einen Filter und Formatter besitzen. Dort kann zum Beispiel das Datumsformat angegeben werden. Es gibt bereits schon fertige Formatter wie z.B. java.util.logging.SimpleFormatter oder java.util.logging.XMLFormatter, die man natürlich durch eine abgeleitete Klasse noch weiter anpassen kann.

package progstruk.logging;

import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;

public class StartLogging {
  private static Logger logger = Logger.getLogger("HTWG");
  public static void main (String[] argsthrows SecurityException, IOException {
  FileHandler fh = new FileHandler("output-htwg.txt");
  //fh.setFormatter(new SimpleFormatter());
  //fh.setFormatter(new XMLFormatter());
  fh.setFormatter(new HtwgFormatter());
  logger.addHandler(fh);
  logger.setLevel(Level.INFO);
  
  int i = 0;
  logger.fine("i ist " + i);
  try {
    ((Object)null).toString();
  catch (Exception e) {
    logger.severe("Schhade ein Fehler");
    logger.log(Level.SEVERE, "Schade ein Fehler", e);
  }
  logger.info("Ich bin fertig");
}
}