- Log4j
-
log4j ist ein Framework zum Loggen von Anwendungsmeldungen in Java. Es wird von unzähligen Open-Source- als auch kommerziellen Softwareprodukten verwendet und hat sich als De-facto-Standard etabliert.
Das Projekt wurde von Ceki Gülcü während seiner Arbeit am IBM-Entwicklungslabor Zürich gegründet. Heute ist es ein Teil des Logging-Projekts der Apache Software Foundation und steht unter der Apache-Lizenz. Es entstand zu einer Zeit, als es in den Java-Standardbibliotheken noch keine Logging-Mechanismen gab. Heutzutage ist es durch seine Ausgereiftheit und Konfigurierbarkeit für viele Softwareentwickler das Log-System der ersten Wahl.
Inhaltsverzeichnis
Funktionsweise
Anstatt auftretende Fehler und Infomeldungen auf die Standardausgabe auszugeben, wird die Nachricht über sogenannte Logger in das Loggingsystem geleitet und gleichzeitig eine Einteilung der Wichtigkeit vorgenommen. Der Programmierer muss sich beim Erstellen des Programms nur um die Wichtigkeit der Meldungen Gedanken machen. Die Filterung und Art der Ausgabe kann zur Laufzeit konfiguriert werden.
Ausgabe-Umfang
In der Konfigurationsdatei kann die Ausgabe je nach Wichtigkeit der Nachrichten gefiltert werden. Der Ausgabe-Umfang steigt mit der zugewiesenen Wichtigkeitsstufe und umfasst alle Nachrichten der Stufe selbst, sowie aller noch dringenderen Stufen. Die Reihenfolge stellt sich dabei wie folgt dar:
ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF
TRACE beinhaltet dabei normalerweise selbst Ausgaben mit Kommentarcharakter, während die Reduzierung auf FATAL nur noch Ausgaben über schwere Programmfehler durchlassen wird. Die beiden Stufen ALL und OFF haben die umfangreichste bzw. überhaupt keine Ausgabe zur Folge.
Für die Einstufung der Wichtigkeit gelten folgende Richtwerte:
- ALL
- Alle Meldungen werden ungefiltert ausgegeben
- TRACE
- ausführlicheres Debugging (seit Version 1.2.12)
- DEBUG
- allgemeines Debugging (Methode DiesUndDas wurde mit Parameter SoUndSo aufgerufen …)
- INFO
- allgemeine Informationen (Programm gestartet, Programm beendet, Verbindung zu Host Foo aufgebaut, Verarbeitung dauerte SoUndSoviel Sekunden …)
- WARN
- Auftreten einer unerwarteten Situation
- ERROR
- Fehler (Exception wurde gefangen. Bearbeitung wurde alternativ fortgesetzt)
- FATAL
- Kritischer Fehler, Programmabbruch
- OFF
- Logging ist deaktiviert
Appender
Mittels Appender kann je nach Wunsch auf Standardausgabe, in eine Datei, ins Systemlog oder in beliebige andere Ziele geschrieben werden bzw. in alle gleichzeitig.
Appender-Arten
- ConsoleAppender
- Gibt auf Standardausgabe aus
- FileAppender
- Schreibt in eine Datei
- RollingFileAppender
- Beginnt eine neue Datei ab einer gewissen Größe
- DailyRollingFileAppender
- Beginnt zu gewissen Zeiten mit einer neue Datei
- SyslogAppender
- Loggt mittels Syslog-Dienst
- NTEventLogAppender
- Schreibt ins Ereignisprotokoll des Windows-Systems
- SMTPAppender
- Schickt bei gewissen Meldungen eine Mail.
- SocketAppender
- Sendet die LogMessage an einen konfigurierten Socket-Listener.
Es gibt auch noch weitere Appender.
Weitere Features
Das Format der Nachrichten kann individuell konfiguriert werden. Neben der reinen Nachricht kann mittels Muster zusätzlich Wichtigkeit, Datum, Loggername, Klassenname, Methodenname bis zur genauen Codezeile ausgegeben werden. Die Namen der Logger können zwar theoretisch beliebig sein, häufig wird sich pragmatisch dazu entschieden den Namen einer Klasse oder eines Pakets zu wählen, um so die Ausgaben entsprechend der Softwarestruktur separat filtern und ausgeben zu können.
Ein weiteres nützliches Feature ist der Mapped Diagnostic Context. Dabei wird einer Contextvariablen ein Wert zugewiesen und in der Konfigurationsdatei kann darauf referenziert werden. Dabei hat jeder Thread seinen eigenen Context und kann zusätzliche Informationen wie z. B. die Adresse des Clients bei einer Serveranwendung protokollieren.
Bedeutung
Derzeit wird versucht, log4j-ähnliche Systeme für andere Programmiersprachen unter dem Apache-Logging-Projekt zusammenzuführen.
Die Ausstrahlung der Log4j-Konzepte auf andere Programmiersprachen bzw. Plattformen ist so groß, dass es mittlerweile etliche Adaptionen gibt:
- Log4C für C
- Log4cxx für C++ mit zu Log4J kompatiblen Konfigurationsdateien
- Log4cplus für C++
- Log4cpp für C++
- Log4js für JavaScript
- Log4perl für Perl
- Log4Net für .Net
- Log4php für PHP
- Log4D für Delphi
- Log4sh für Unix-Shells
Weblinks
- log4j-Webseiten (engl.)
- log4j-Wiki (engl.)
- Portierung von log4j nach java.util.logging (engl.)
- Logging mit Log4j Einführung von Torsten Horn
- Log4j Tutorial mit Tomcat Beispielen von Sebastian Hennebrueder
- Log4D für Delphi
- Log4sh für Unix-Shells
- log4net für .NET-Software (engl.)
Wikimedia Foundation.