Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

Java Logging meistern: Grundlagen & Best Practices

Java Logging Grundlagen

In diesem Tutorial lernen wir Java Logging und seine verschiedenen Komponenten anhand von Beispielen kennen.

Java erlaubt uns, Log-Nachrichten und -Dateien durch den Prozess des Loggings zu erstellen und zu erfassen.

In Java erfordert Logging Frameworks und APIs. Java hat ein eingebautes Logging-Framework im java.util.logging-Paket.

Wir können auch Drittanbieter-Frameworks wie Log4j, Logback und viele mehr für Logging-Zwecke nutzen.


Java Logging Komponenten

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

Java Logging meistern: Grundlagen & Best Practices

1. Logger

Logger-Klasse stellt Methoden für Logging bereit. Wir können Objekte von der Logger-Klasse instanziieren und ihre Methoden für Logging-Zwecke aufrufen.

Nehmen wir ein Beispiel.

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

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

Hier erstellt dies ein neues Logger-Objekt oder gibt einen existierenden Logger mit demselben Namen zurück.

Es ist Konvention, einen Logger nach der aktuellen Klasse mit class.getName() zu definieren.

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

Hinweis: Diese Methode wirft NullPointerException, wenn der übergebene Name null ist.

Jeder Logger hat ein Level, das die Wichtigkeit der Log-Nachricht bestimmt. Es gibt 7 grundlegende Log-Level:

Log Level (absteigend)Verwendung
SEVEREschwerwiegender Fehler
WARNINGWarnmeldung, potentielles Problem
INFOallgemeine Laufzeitinformation
CONFIGKonfigurationsinformation
FINEallgemeine Entwicklerinformation (Trace-Nachrichten)
FINERdetaillierte Entwicklerinformation (Trace-Nachrichten)
FINESThochdetaillierte Entwicklerinformation (Trace-Nachrichten)
OFFLogging für alle Level deaktivieren (nichts erfassen)
ALLLogging für alle Level aktivieren (alles erfassen)

Jedes Log-Level hat einen Integer-Wert, der ihren Schweregrad bestimmt, außer den zwei speziellen Leveln OFF und ALL.


Die Nachricht loggen

Standardmäßig werden die oberen drei Log-Level immer geloggt. Um ein anderes Level zu setzen, können wir folgenden Code verwenden:

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

In diesem Beispiel werden nur Level FINE und höhere Level geloggt. Alle anderen Log-Nachrichten werden verworfen.

Um eine Nachricht zu loggen, nutzen wir die log()-Methode.

logger.log(Level.LogLevel, "log nachricht"); // Beispiel logger.log(Level.INFO, "Dies ist INFO Log Level Nachricht"); 

Es gibt Kurzmethoden für das Loggen auf gewünschten Levels.

logger.info("Dies ist INFO Log Level Nachricht"); logger.warning("Dies ist WARNING Log Level Nachricht"); 

Alle Log-Anfragen, die das gesetzte Log-Level passiert haben, werden dann an den LogRecord weitergeleitet.

Hinweis: Wenn ein Loggers Level auf null gesetzt ist, wird sein Level vom Eltern-Logger vererbt und so weiter den Baum hinauf.


2. Filter

Ein Filter (falls vorhanden) bestimmt, ob der LogRecord weitergeleitet werden soll oder nicht. Wie der Name andeutet, filtert er Log-Nachrichten nach spezifischen Kriterien.

Ein LogRecord wird nur vom Logger zum Log-Handler und vom Log-Handler zu externen Systemen weitergegeben, wenn er die spezifizierten Kriterien besteht.

// Filter setzen logger.setFilter(filter); // Filter abrufen Filter filter = logger.getFilter(); 

3. Handler (Appender)

Der Log-Handler oder Appender empfängt den LogRecord und exportiert ihn an verschiedene Ziele.

Java SE bietet 5 eingebaute Handler:

HandlerVerwendung
StreamHandlerschreibt in einen OutputStream
ConsoleHandlerschreibt auf die Konsole
FileHandlerschreibt in Datei
SocketHandlerschreibt auf entfernte TCP-Ports
MemoryHandlerschreibt in Memory

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

Um einen neuen Handler hinzuzufügen, nutzen wir:

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

Um einen Handler zu entfernen:

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

Ein Logger kann mehrere Handler haben. Um alle Handler zu erhalten:

Handler[] handler = logger.getHandlers(); 

4. Formatter

Ein Handler kann auch einen Formatter nutzen, um das LogRecord-Objekt in einen String zu formatieren, bevor er an externe Systeme exportiert wird.

Java SE hat zwei eingebaute Formatter:

FormatterVerwendung
SimpleFormatterformatiert LogRecord zu String
XMLFormatterformatiert LogRecord zu XML-Form

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

// formatiert zu String-Form handler.setFormatter(new SimpleFormatter()); // formatiert zu XML-Form handler.setFormatter(new XMLFormatter()); 

LogManager

Das LogManager-Objekt behält die globalen Logging-Informationen bei. Es liest und verwaltet die Logging-Konfiguration und die Logger-Instanzen.

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

Um die Log Manager Instanz zu erhalten, nutzen wir:

LogManager manager = LogManager.getLogManager(); 

Vorteile von Logging

Hier sind einige Vorteile von Logging in Java.

  • hilft beim Überwachen des Programmflusses
  • hilft beim Erfassen von Fehlern, die auftreten können
  • bietet Unterstützung für Problemdiagnose und Debugging

Java

  1. Java Operatoren meistern: Typen, Syntax und praktische Beispiele
  2. Java Kommentare: Typen, Verwendung und Best Practices
  3. Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
  4. Java Strings meistern: Erstellung, Methoden und Best Practices
  5. Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
  6. Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
  7. Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
  8. Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
  9. Java Assertions: Praktischer Leitfaden zur Fehlererkennung und Code-Reliabilität
  10. Java Vector verstehen: Verwendung, Funktionen und Vergleich mit ArrayList