Java-Protokollierung

In diesem Tutorial lernen wir anhand von Beispielen die Java-Protokollierung und ihre verschiedenen Komponenten kennen.

Mit Java können wir Protokollnachrichten und -dateien während des Protokollierungsprozesses erstellen und erfassen.

In Java erfordert die Protokollierung Frameworks und APIs. Java verfügt über ein integriertes Protokollierungsframework im java.util.loggingPaket.

Wir können auch Frameworks von Drittanbietern wie Log4j, Logback und viele mehr für Protokollierungszwecke verwenden.

Java-Protokollierungskomponenten

Die folgende Abbildung zeigt die Kernkomponenten und den Kontrollfluss der Java Logging API ( java.util.logging).

Java-Protokollierung

1. Logger

Die LoggerKlasse bietet Methoden zur Protokollierung. Wir können Objekte aus der LoggerKlasse instanziieren und ihre Methoden zu Protokollierungszwecken aufrufen.

Nehmen wir ein Beispiel.

 Logger logger = Logger.getLogger("newLoggerName"); 

Die getLogger()Methode der LoggerKlasse wird verwendet, um eine neue zu finden oder zu erstellen Logger. Das String-Argument definiert den Namen des Loggers.

Hier wird ein neues LoggerObjekt erstellt oder ein vorhandenes Loggermit demselben Namen zurückgegeben.

Es ist eine Konvention, ein Loggernach der aktuellen Klasse mit zu definieren class.getName().

 Logger logger = Logger.getLogger(MyClass.class.getName()); 

Hinweis: Diese Methode wird ausgelöst, NullPointerExceptionwenn der übergebene Name lautet null.

Jedes Loggerhat eine Ebene, die die Wichtigkeit der Protokollnachricht bestimmt. Es gibt 7 grundlegende Protokollebenen:

Protokollstufe (in absteigender Reihenfolge) Verwenden
STARK schwerwiegender Fehler
WARNUNG Warnmeldung, ein potenzielles Problem
DIE INFO Allgemeine Laufzeitinformationen
KONFIG Konfigurationsinformationen
FEIN Allgemeine Entwicklerinformationen (Tracing-Nachrichten)
FINER detaillierte Entwicklerinformationen (Tracing-Nachrichten)
FINEST sehr detaillierte Entwicklerinformationen (Tracing-Nachrichten)
AUS Deaktivieren Sie die Protokollierung für alle Ebenen (erfassen Sie nichts)
ALLE Aktivieren Sie die Protokollierung für alle Ebenen (erfassen Sie alles)

Jede Protokollebene hat einen ganzzahligen Wert, der ihren Schweregrad bestimmt, mit Ausnahme von zwei speziellen Protokollebenen OFFund ALL.

Protokollieren der Nachricht

Standardmäßig werden die drei obersten Protokollebenen immer protokolliert. Um eine andere Ebene festzulegen, können wir den folgenden Code verwenden:

 logger.setLevel(Level.LogLevel); // example logger.setLevel(Level.FINE); 

In diesem Beispiel werden nur die Ebene FINEund die darüber liegenden Ebenen als protokolliert festgelegt. Alle anderen Protokollnachrichten werden gelöscht.

Um nun eine Nachricht zu protokollieren, verwenden wir die log()Methode.

 logger.log(Level.LogLevel, "log message"); // example logger.log(Level.INFO, "This is INFO log level message"); 

Es gibt Kurzmethoden zum Protokollieren auf den gewünschten Ebenen.

 logger.info( "This is INFO log level message"); logger.warning( "This is WARNING log level message"); 

Alle Protokollanforderungen, die die festgelegte Protokollstufe überschritten haben, werden dann an den LogRecord weitergeleitet .

Hinweis: Wenn die Ebene eines Protokollierers auf festgelegt ist, nullwird seine Ebene von seinem übergeordneten Element usw. im Baum geerbt.

2. Filter

Ein Filter (falls vorhanden) bestimmt, ob der LogRecord weitergeleitet werden soll oder nicht. Wie der Name schon sagt, werden die Protokollnachrichten nach bestimmten Kriterien gefiltert.

Ein LogRecord wird nur dann vom Logger an den Log-Handler und vom Log-Handler an externe Systeme übergeben, wenn er die angegebenen Kriterien erfüllt.

 // set a filter logger.setFilter(filter); // get a filter Filter filter = logger.getFilter(); 

3. Handler (Appender)

Der Log-Handler oder die Appender empfangen den LogRecord und exportieren ihn an verschiedene Ziele.

Java SE bietet 5 integrierte Handler:

Handler Verwenden
StreamHandler schreibt an eine OutputStream
ConsoleHandler schreibt in die Konsole
FileHandler schreibt in eine Datei
SocketHandler schreibt auf entfernte TCP-Ports
MemoryHandler schreibt in den Speicher

Ein Handler kann den LogRecord an einen Filter übergeben, um erneut zu bestimmen, ob er an externe Systeme weitergeleitet werden kann oder nicht.

Um einen neuen Handler hinzuzufügen, verwenden wir den folgenden Code:

 logger.addHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); 

Um einen Handler zu entfernen, verwenden wir den folgenden Code:

 logger.removeHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler); 

Ein Logger kann mehrere Handler haben. Um alle Handler zu erhalten, verwenden wir den folgenden Code:

 Handler() handlers = logger.getHandlers(); 

4. Formatierer

Ein Handler kann das LogRecord- Objekt auch mithilfe eines Formatierers in eine Zeichenfolge formatieren , bevor es in externe Systeme exportiert wird.

Java SE verfügt über zwei integrierte Formatierer :

Formatierer Verwenden
SimpleFormatter formatiert LogRecord in Zeichenfolge
XMLFormatter Formate LogRecord to XML-Formular

Wir können den folgenden Code verwenden, um einen Handler zu formatieren:

 // formats to string form handler.setFormatter(new SimpleFormatter()); // formats to XML form handler.setFormatter(new XMLFormatter()); 

LogManager

Das LogManager- Objekt verfolgt die globalen Protokollierungsinformationen. Es liest und verwaltet die Protokollierungskonfiguration und die Protokollierungsinstanzen.

Der Protokollmanager ist ein Singleton, was bedeutet, dass nur eine Instanz davon instanziiert wird.

Um die Protokollmanagerinstanz zu erhalten, verwenden wir den folgenden Code:

 LogManager manager = new LogManager(); 

Vorteile der Protokollierung

Hier sind einige der Vorteile der Anmeldung in Java.

  • hilft bei der Überwachung des Programmflusses
  • hilft bei der Erfassung eventuell auftretender Fehler
  • bietet Unterstützung für die Problemdiagnose und das Debuggen

Interessante Beiträge...