Java-Anwendungen mit Logging-Funktion

Log4j legt mithilfe von Appendern fest, welche Art des Logging angewendet wird, wenn das Logging-Paket eine Anweisung erhält. Die Standard-Appender von Log4 sind Screen (Konsole), File (Datei), Rotating file (rotierende Datei) und ein Remote-Appender, der das Sammeln von Log-Daten an einem zentralen Ort ermöglicht. Die Appender werden auf die Kategorien angewandt, so dass verschiedene Teile der Anwendung verschiedene Log-Ziele aufweisen können.

Sobald Sie Priorität und Appender für die Kategorien festgelegt haben, muss nur noch ein Layout bestimmt werden. Mit Layouts wird das exakte Format Ihrer Logging-Anweisungen kontrolliert, wie z.B. Datum, Zeit, Modulbezeichnung und Thread-Identifizierungen. Ich werde hier nicht versuchen, alle verfügbaren Formate abzudecken, da die Log4j-Dokumentation eine exzellente Übersicht darüber enthält.

Log4j kann mit einer XML- oder einer Java-Property-Datei konfiguriert werden. Ich ziehe die Java-Datei vor, da es etwas übertrieben wäre, zu diesem Zweck eine XML-Datei zu verwenden. Listing A enthält eine Property-Datei, mit der Log4j konfiguriert werden kann.

Die erste Zeile in dieser Datei ohne Kommentar legt fest, dass die Basiskategorie die Priorität DEBUG und drei Appender aufweist, die durch A1, A2 und A3 identifiziert werden. Die verbleibenden Sektionen bestimmen den Appender für jeden Identifikator. In dieser Property sind die Appender eine Konsole (Screen), ein Rotating File und ein UDP-Sender.

Der UDP-Sender ist ein Appender, den ich zu dem Log4j-Paket hinzugefügt habe, so dass ich Log-Anweisungen interaktiv beobachten kann. An jedem Appender hängt ein Layout-Objekt. In diesem Fall wird das PatternLayout verwendet, und das Konvertierungsmuster folgt. Die Zeichen im Konvertierungsmuster bestimmen die Ausgabe der Daten. Mit dem %-Zeichen wird die Formatierungsanweisung festgelegt. In diesem Beispiel steht %-5p für linksbündige Ausrichtung mit fünf Zeichen für die Priorität (p). Darauf folgt das Datum (%d), die Thread-Information (%t), die Message (%m) und schließlich ein Zeichen für das Ende der Zeile (%n).

Um in Ihrer Anwendung Log4j zu verwenden, müssen Sie diese Property-Datei mit Hilfe eines PropertyConfigurator laden. Mit einer solchen Zeile in Ihrer Startup-Klasse sollte dies möglich sein:


import org.apache.log4j.PropertyConfigurator;
….
PropertyConfigurator.configure("path/to/file.properties");

Sobald die Konfiguration geladen ist, braucht jede Klasse in Ihrer Anwendung, für die Logging erforderlich ist, eine Referenz zum Kategorieobjekt. Da die Kategorie eine Paketbenennungskonvention verwendet, nehme ich oft den Namen der Klasse für die Kategorie, auch wenn dies nicht erforderlich ist, je nachdem, wie Sie die Konfiguration eingerichtet haben. Wenn Sie für die Klasse eine einzige statische Variable festlegen, stehen die Logging-Routinen zur Verfügung:


import org.apache.log4j.Category;
….
private static final Category log =
Category.getInstance(MyClass.class.getName());

Page: 1 2 3

ZDNet.de Redaktion

Recent Posts

Das sind die besten Cybersicherheits-Anbieter Deutschlands

KI und Nachholbedarf des Mittelstands treiben die Nachfrage nach End-to-End-Services. SOC-Dienstleister profitieren besonders stark.

3 Tagen ago

Wearables etablieren sich als Trendmarkt

Bereits ein Drittel der Deutschen nutzt eine Smartwatch. 70 Prozent zeigen sich offen für weitere…

3 Tagen ago

Sicherheitslücke: Yubico-Sicherheitsschlüssel anfällig für Cloning

Der eigentliche Fehler steckt in einem Sicherheitschip von Infineon. Angreifbare YubiKeys von Yubico lassen sich…

3 Tagen ago

Google gibt Final von Android 15 für Entwickler frei

Der Quellcode steht dem Android Open Source Project zur Verfügung. Pixel-Smartphones und Geräte von Drittanbietern…

3 Tagen ago

Daten sicher auf optischen Speichermedien verschlüsseln

EncryptDisc Creator ermöglicht es auf einfache Weise, Daten sicher verschlüsselt auf handelsüblichen optischen Medien wie…

3 Tagen ago

Google schließt Zero-Day-Lücke in Android

Betroffen sind Android 12, 12L, 13 und 14. Ein Angreifer kann unter Umständen höhere Rechte…

4 Tagen ago