Java-logboekregistratie
Java-logboekregistratie
In deze zelfstudie leren we over Java Logging en de verschillende componenten ervan aan de hand van voorbeelden.
Java stelt ons in staat om logberichten en bestanden te maken en vast te leggen via het logproces.
In Java vereist logging frameworks en API's. Java heeft een ingebouwd lograamwerk in de java.util.logging
pakket.
We kunnen ook frameworks van derden gebruiken, zoals Log4j, Logback en nog veel meer voor logdoeleinden.
Java Logging-componenten
De onderstaande afbeelding geeft de kerncomponenten en de controlestroom van de Java Logging API weer (java.util.logging
).
1. Logger
De Logger
class biedt methoden voor het loggen. We kunnen objecten van de Logger
. instantiëren class en roep zijn methoden op voor logdoeleinden.
Laten we een voorbeeld nemen.
Logger logger = Logger.getLogger("newLoggerName");
De getLogger()
methode van de Logger
class wordt gebruikt om een nieuwe Logger
. te vinden of te maken . Het stringargument definieert de naam van de logger.
Hier creëert dit een nieuwe Logger
object of retourneert een bestaande Logger
met dezelfde naam.
Het is een conventie om een Logger
. te definiëren na de huidige les met class.getName()
.
Logger logger = Logger.getLogger(MyClass.class.getName());
Opmerking: Deze methode genereert NullPointerException
als de doorgegeven naam null
. is .
Elke Logger
heeft een niveau dat het belang van het logbericht bepaalt. Er zijn 7 basislogniveaus:
Logniveau (in aflopende volgorde) | Gebruik |
---|---|
ERNSTIG | ernstige fout |
WAARSCHUWING | waarschuwingsbericht, een potentieel probleem |
INFO | algemene runtime-informatie |
CONFIG | configuratie-informatie |
FIJN | algemene ontwikkelaarsinformatie (opsporingsberichten) |
FIJNER | gedetailleerde ontwikkelaarsinformatie (opsporingsberichten) |
FIJNSTE | zeer gedetailleerde ontwikkelaarsinformatie (opsporingsberichten) |
UIT | loggen uitschakelen voor alle niveaus (niets vastleggen) |
ALLE | loggen inschakelen voor alle niveaus (alles vastleggen) |
Elk logniveau heeft een geheel getal dat hun ernst bepaalt, behalve twee speciale logniveaus OFF
en ALL
.
Het bericht loggen
Standaard worden de bovenste drie logniveaus 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 alleen niveau FINE
en niveaus erboven zijn ingesteld om te worden gelogd. Alle andere logberichten worden verwijderd.
Om nu 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 logverzoeken die het ingestelde logniveau hebben overschreden, worden vervolgens doorgestuurd naar het LogRecord .
Opmerking: Als het niveau van een logger is ingesteld op null
, het niveau wordt geërfd van het bovenliggende niveau, enzovoort.
2. Filters
Een filter (indien aanwezig) bepaalt of de LogRecord moet worden doorgestuurd of niet. Zoals de naam al doet vermoeden, filtert het de logberichten volgens specifieke criteria.
Een LogRecord wordt alleen doorgegeven van de logger naar de log-handler en van de log-handler 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 log-handler of de appenders ontvangen het LogRecord en exporteert 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 naar 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 . te formatteren object in een tekenreeks voordat u het naar externe systemen exporteert.
Java SE heeft twee ingebouwde formatters :
Opmaak | Gebruik |
---|---|
SimpleFormatter | formaten LogRecord aan rijgen |
XMLFormatter | formaten LogRecord naar XML-formulier |
We kunnen de volgende code gebruiken om een handler te formatteren:
// formats to string form
handler.setFormatter(new SimpleFormatter());
// formats to XML form
handler.setFormatter(new XMLFormatter());
LogManager
De LogManager object houdt de globale logboekinformatie bij. Het leest en onderhoudt de logging-configuratie en de logger-instanties.
De logmanager is een singleton, wat betekent dat er maar één instantie van wordt gemaakt.
Om de logmanager-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 bewaken van de voortgang van het programma
- helpt bij het vastleggen van eventuele fouten
- biedt ondersteuning voor probleemdiagnose en foutopsporing
Java