12.15 Die Logging-API
Mit der Java-Logging-API kann eine Softwaremeldung in eine XML- oder Textdatei schreiben, die dann zur Wartung oder Kontrolle der Sicherheit eingesetzt werden kann. Zum Schreiben der Informationen dreht sich alles um ein Logger-Objekt, das etwa eine log()-Methode anbietet. Diesem Objekt wird ein Handler zugewiesen, der für das Schreiben der Daten verantwortlich ist. Ein FileHandler etwa speichert in eine Datei, ein ConsoleHandler gibt die Daten auf System.err aus.
Hier klicken, um das Bild zu Vergrößern
Wir wollen die API benutzen und eine Exception erzwingen, die dann im catch-Block in eine Log-Datei geschrieben wird.
Listing 12.44 Logging .java
import java.util.logging.*;
import java.io.*;
public class Logging
{
private static Logger logger = Logger.getLogger("Logging");
public static void main( String args[] ) throws IOException
{
FileHandler fh = new FileHandler( "c:\\log.xml.txt" );
logger.addHandler( fh );
// logger.setLevel( Level.ALL );
logger.fine( "Dann mal los." );
try
{
((Object)null).toString(); // Fehler produzieren
}
catch ( Exception e )
{
logger.log( Level.WARNING, "oh oh", e );
}
logger.fine( "Ging alles glatt." );
}
}
Wenn wir die geschriebene Datei betrachten, dann finden wir sie in XML, sogar nach einer DTD formatiert. Die Typdefinition ist unter http://java.sun.com/j2se/1.4/docs/guide/util/logging/overview.html#3.0 definiert.
<?xml version="1.0" standalone="no"?>
<!DOCTYPE log SYSTEM ">file:logger.dtd">
<log>
<record>
<date>2001-05-27T15:49:57</date>
<millis>990971397686</millis>
<sequence>0</sequence>
<logger>Logging</logger>
<level>WARNING</level>
<class>Logging</class>
<method>main</method>
<thread>10</thread>
<message>oh oh</message>
<exception>
<message>java.lang.NullPointerException</message>
<frame>
<class>Logging</class>
<method>main</method>
<line>20</line>
</frame>
</exception>
</record>
Damit das Datenvolumen kontrolliert und eingeschränkt werden kann, lassen sich die Logger oder Handler mit einem Filter versehen, der nur Ausschnitte aus dem Datenstrom schreibt. Und das Datenformat selbst kann zusätzlich mit Format-Objekten angepasst und lokalisiert werden, bevor sie in den Datenstrom geschrieben werden. Damit verschiedene Detailgrade unterstützt werden, lässt sich über einen Level der Grad der Detaillierung festlegen. Sie reicht von FINEST bis SEVERE. Zur direkten Unterstützung der Levels wurden spezielle Methoden eingeführt. Eine weitere Anpassung von Logging besteht darin, es von außen über Property-Dateien zu verfeinern. Das Kapitel unter http://java.sun.com/j2se/1.4/docs/guide/util/logging/overview.html#1.8 verrät mehr darüber.
|