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.logging
pakket.
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.

1. Logger
De Logger
klasse biedt methoden voor logboekregistratie. We kunnen objecten uit de Logger
klasse instantiëren en de methoden ervan aanroepen voor logboekdoeleinden.
Laten we een voorbeeld nemen.
Logger logger = Logger.getLogger("newLoggerName");
De getLogger()
methode van de Logger
klasse wordt gebruikt om een nieuw Logger
. Het string-argument definieert de naam van de logger.
Hier maakt dit een nieuw Logger
object aan of retourneert een bestaand object Logger
met dezelfde naam.
Het is een afspraak om een Logger
na de huidige klasse te definiëren met class.getName()
.
Logger logger = Logger.getLogger(MyClass.class.getName());
Opmerking: deze methode zal gooien NullPointerException
als de doorgegeven naam is null
.
Elk Logger
heeft 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 OFF
en 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 FINE
en 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