Freie Universität Berlin · Institut für Informatik
Softwarepraktikum · SoSe 2002
Dozent: Ulrich Kortenkamp

Carsten Gräser · 29. April 2002

Log4J

1 Wozu Log4J?

Log4j ist ein Loggingtool, daß es auf einfache und komfortable Art ermöglicht, Meldungen auf verschiedenste Art auszugeben.

2 Wie funktioniert Log4J?

Um Log4j zu benutzen ist das Package org.apache.log4j einzubinden. Log4j besteht aus drei wesentlichen Komponenten:

2.1 Logger

Ein Logger ist ein Objekt, an daß die auszugebenden Meldungen übergeben werden. Es existiert eine von log4j verwaltete Logger-Hierarchie. Dabei müssen nicht alle Stufen der Hierarchie existieren. Um einen Logger 'swp' und einen Nachfahren 'swp.torfu.loggin' zu erschaffen verfährt man wie folgt

Logger l1 = Logger.getLogger("swp");
Logger l2 = Logger.getLogger("swp.torfu.logging");

Für auszugebende Meldungen existieren verschiedene Level. Geordnet nach Priorität sind das DEBUG < INFO < WARN < ERROR < FATAL. Jedem Logger kann ein solcher Level zugeordnet werden. Geschieht dies nicht, "erbt" er den Level seines nächsten Vorfahren. Eine Meldung wird nun je nach Priorität an den Logger übermittelt und von diesem weitergeleitet, falls ihr Level mindestens so hoch ist wie der des Loggers (im Bsp. nur die letzten beiden).

Logger l = Logger.getLogger("wecker");
l.setLevel(Level.ERROR);
l.debug("Jetzt wird geweckt.");
l.info("Guten Morgen.");
l.warn("Du solltest langsam aufstehen !");
l.error("Jetzt kommst Du schon zuspät !");
l.fatal("Na toll Du Langschläfer, nun hast Du das SWP-Tutorium verpennt.");


2.2 Appender

Appender geben die Meldungen eines Loggers auf verschiedenste Art aus An einen Logger können mehrere Appender angehängt werden. Ein Logger "erbt" normalerweise alle Appender, seines nächsten Vorfahrens. Dieses Verhalten kann jedoch für einen Logger ausgeschaltet werden, dann beginnt dieser (und damit alle seine Nachfahren) mit einer neuen Appenderliste. Dieses Verhalten kann komplet außerhalb des Codes über eine Konfigurationsdatei eingestellet werden, die vom Java-Programm eingelesen wird.

\\ im Java-Programm
PropertyConfigurator.configure("config");

# im Config-File 'config'
log4j.additivity.wecker=false
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.file=logfile.log
log4j.appender.A2.MaxFileSize=10MB
log4j.appender.A2.MaxBackupIndex=1
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%-5p [%t] (%F:%L) - %m%n
log4j.rootLogger = DEBUG, A1
log4j.logger.wecker = ERROR, A2


2.3 Layouts

Bevor eine Meldung vom Appender ausgegeben wird, wird sie gemäß eines Layouts formatiert. Diese Layouts werden den Appendern ebenfalls über die Konfigurationsdatei zugeordnet. Ist dieses ein PatternLayout, so kann ein ConversionPattern angegeben werden, daß (ähnlich wie bei printf in C) festlegt, welche Angaben wie ausgegeben werden. Im Beispiel (s.o.) wird zuerst linksbündig mit fünf Zeichen die Priorität der Meldung ausgegeben ( %-5p ). Dann wird der aufrufende Thread ausgegeben ( [%t] ). Dann kommen Name und Zeilennummer der aufrufenden Methode ( (%F:%L) ) gefolgt von der Meldung und ( %m ) und einem Zeilenwechsel ( %n ).

3 Weitere Infos

Unter http://jakarta.apache.org/log4j kann man das Log4j Packet, viele Infos dazu und links zu anderen Artikeln über Log4j finden. Unter anderem findet sich dort eine kurze Einführung und die vollständige Javadoc-Dokumentation. Ferner finden sich dort Portierungen etwa für C, C++ und Python.






Letzte Änderung vorgenommen am Thursday, 09-May-2002 21:31:24 CEST
Martin Hense: hense@inf.fu-berlin.de

Valid HTML 4.0!