Java-logboekregistratie

In deze zelfstudie leren we met behulp van voorbeelden over Java Logging en de verschillende componenten ervan.

Java stelt ons in staat om logboekberichten en bestanden te maken en vast te leggen door middel van het loggen.

In Java vereist logboekregistratie frameworks en API's. Java heeft een ingebouwd logboekframework in het java.util.loggingpakket.

We kunnen ook frameworks van derden gebruiken, zoals Log4j, Logback en nog veel meer voor logboekdoeleinden.

Java-logboekcomponenten

De onderstaande afbeelding geeft de kerncomponenten en de controlestroom van de Java Logging API ( java.util.logging) weer.

Java-logboekregistratie

1. Logger

De Loggerklasse biedt methoden voor logboekregistratie. We kunnen objecten uit de Loggerklasse instantiëren en de methoden ervan aanroepen voor logboekdoeleinden.

Laten we een voorbeeld nemen.

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

De getLogger()methode van de Loggerklasse wordt gebruikt om een ​​nieuw Logger. Het string-argument definieert de naam van de logger.

Hier maakt dit een nieuw Loggerobject aan of retourneert een bestaand object Loggermet dezelfde naam.

Het is een afspraak om een Loggerna de huidige klasse te definiëren met class.getName().

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

Opmerking: deze methode zal gooien NullPointerExceptionals de doorgegeven naam is null.

Elk Loggerheeft een niveau dat het belang van het logbericht bepaalt. Er zijn 7 basislogboekniveaus:

Logboekniveau (in aflopende volgorde) Gebruik
ERGE, ERNSTIGE ernstige mislukking
WAARSCHUWING waarschuwingsbericht, een mogelijk probleem
INFO algemene runtime-informatie
CONFIG configuratie-informatie
FIJN algemene ontwikkelaarsinformatie (traceringsberichten)
FIJNER gedetailleerde ontwikkelaarsinformatie (traceringsberichten)
BESTE zeer gedetailleerde ontwikkelaarsinformatie (tracering van berichten)
UIT logboekregistratie uitschakelen voor alle niveaus (niets vastleggen)
ALLE logboekregistratie inschakelen voor alle niveaus (alles vastleggen)

Elk logboekniveau heeft een geheel getal dat de ernst ervan bepaalt, met uitzondering van twee speciale logboekniveaus OFFen ALL.

Het bericht loggen

Standaard worden de bovenste drie logboekniveaus altijd gelogd. Om een ​​ander niveau in te stellen, kunnen we de volgende code gebruiken:

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

In dit voorbeeld zijn alleen het niveau FINEen de niveaus erboven ingesteld om te worden geregistreerd. Alle andere logboekberichten worden verwijderd.

Om een ​​bericht te loggen, gebruiken we de log()methode.

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

Er zijn verkorte methoden om op de gewenste niveaus te loggen.

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

Alle logboekverzoeken die het ingestelde logniveau hebben overschreden, worden vervolgens doorgestuurd naar de LogRecord .

Opmerking: als het niveau van een logger is ingesteld op null, wordt het niveau overgenomen van de ouder en zo verder in de boom.

2. Filters

Een filter (indien aanwezig) bepaalt of het LogRecord moet worden doorgestuurd of niet. Zoals de naam suggereert, filtert het de logboekberichten op basis van specifieke criteria.

Een LogRecord wordt alleen doorgegeven van de logger naar de logboekhandler en van de logboekhandler naar externe systemen als het voldoet aan de gespecificeerde criteria.

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

3. Handlers (Appenders)

De logboekhandler of de appenders ontvangen het LogRecord en exporteren het naar verschillende doelen.

Java SE biedt 5 ingebouwde handlers:

Handlers Gebruik
StreamHandler schrijft naar een OutputStream
ConsoleHandler schrijft naar console
FileHandler schrijft naar bestand
SocketHandler schrijft naar externe TCP-poorten
MemoryHandler schrijft naar het geheugen

Een handler kan het LogRecord doorgeven aan een filter om opnieuw te bepalen of het kan worden doorgestuurd naar externe systemen of niet.

Om een ​​nieuwe handler toe te voegen, gebruiken we de volgende code:

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

Om een ​​handler te verwijderen, gebruiken we de volgende code:

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

Een logger kan meerdere handlers hebben. Om alle handlers te krijgen, gebruiken we de volgende code:

 Handler() handlers = logger.getHandlers(); 

4. Formatteerders

Een handler kan ook een formatter gebruiken om het LogRecord- object in een string te formatteren voordat het naar externe systemen wordt geëxporteerd.

Java SE heeft twee ingebouwde Formatters :

Formatters Gebruik
SimpleFormatter formatteert LogRecord naar string
XMLFormatter formaten LogRecord naar XML-formulier

We kunnen de volgende code gebruiken om een ​​handler op te maken:

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

LogManager

Het LogManager- object houdt de globale logboekinformatie bij. Het leest en onderhoudt de logboekconfiguratie en de loggerinstanties.

De logmanager is een singleton, wat betekent dat er slechts één exemplaar van wordt geïnstantieerd.

Om de log manager-instantie te verkrijgen, gebruiken we de volgende code:

 LogManager manager = new LogManager(); 

Voordelen van loggen

Hier zijn enkele voordelen van inloggen in Java.

  • helpt bij het volgen van de stroom van het programma
  • helpt bij het vastleggen van eventuele fouten die kunnen optreden
  • biedt ondersteuning voor probleemdiagnose en foutopsporing

Interessante artikelen...