Log4j
aus Wikipedia, der freien Enzyklopädie
Der korrekte Titel dieses Artikels lautet „log4j“. Diese Schreibweise ist aufgrund technischer Einschränkungen nicht möglich. |
Log4j ist ein Framework zum Loggen von Anwendungsmeldungen in Java. Es wird von unzähligen OpenSource- als auch kommerziellen Softwareprodukten verwendet und hat sich als Defacto-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. 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.
[Bearbeiten] Funktionsweise
Anstatt auftretende Fehler und Infomeldungen auf Standardausgabe auszugeben, wird die Nachricht dem Loggingsystem übergeben 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. Die Stufen reichen von TRACE, DEBUG, INFO, WARN, ERROR bis FATAL. Trace ist am unwichtigsten und Fatal kommt einem schweren Programmfehler gleich. Ausnahmen bilden die beiden Stufen ALL und OFF, die das Logging entweder komplett deaktivieren (OFF) oder alle Meldungen ungefiltert ausgeben (ALL).
In der Konfigurationsdatei kann die Ausgabe je nach Wichtigkeit gefiltert werden, wobei dabei die gewählte Wichtigkeit und alle wichtigeren Stufen geloggt werden. Die Reihenfolge der Prioritäts-Stufen stellt sich wie folgt: ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF. Wenn WARN als Schwellwert für die Filterung angegeben wird, dann werden alle höherwertigen Meldungen ausgegeben (sprich: WARN, ERROR und FATAL). Mittels Appender kann je nach Wunsch auf Standardausgabe, in eine Datei, ins Systemlog oder in beliebige andere Ziele geschrieben werden bzw. in alle gleichzeitig.
Für die Einstufung der Priorität gelten folgende Richtwerte.
- ALL
- Alle Meldungen werden ungefiltert ausgegeben
- TRACE
- ausführlicheres Debugging (seit Vers. 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
[Bearbeiten] Appender
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.
Des Weiteren kann das Format der Nachrichten 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, praktisch entspricht der Name des Loggers dem Namen der Klasse. Dadurch lässt sich auch die Ausgabe einer bestimmten Klasse oder eines bestimmten Paketes separat filtern und ausgeben.
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.
Derzeit wird versucht, Log4j-ähnliche Systeme für andere Programmiersprachen unter dem Apache-Logging-Projekt zusammenzuführen.