Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java Logging meesteren: fundamentals & best practices

Java Logging fundamentals

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

Java stelt ons in staat logberichten en bestanden te creëren en vast te leggen via het proces van logging.

In Java vereist logging frameworks en APIs. Java heeft een ingebouwd logging framework in het java.util.logging pakket.

We kunnen ook third-party frameworks gebruiken zoals Log4j, Logback, en nog veel meer voor logging doeleinden.


Java Logging componenten

De onderstaande figuur vertegenwoordigt de kerncomponenten en de controlestroom van de Java Logging API (java.util.logging).

Java Logging meesteren: fundamentals & best practices

1. Logger

De Logger klasse biedt methoden voor logging. We kunnen objecten instantiëren uit de Logger klasse en zijn methoden aanroepen voor logging doeleinden.

Laten we een voorbeeld nemen.

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

De getLogger() methode van de Logger klasse wordt gebruikt om een nieuwe Logger te vinden of te creëren. Het string argument 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 definieren na de huidige klasse met behulp van class.getName().

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

Let op: Deze methode gooit NullPointerException als de doorgegeven naam null is.

Elke Logger heeft een level dat het belang van het logbericht bepaalt. Er zijn 7 basis log levels:

Log Level (in aflopende volgorde)Gebruik
SEVEREernstige fout
WARNINGwaarschuwingsbericht, een potentieel probleem
INFOalgemene runtime informatie
CONFIGconfiguratie informatie
FINEalgemene ontwikkelaarsinformatie (tracing berichten)
FINERgedetailleerde ontwikkelaarsinformatie (tracing berichten)
FINESTzeer gedetailleerde ontwikkelaarsinformatie (tracing berichten)
OFFlogging uitschakelen voor alle levels (niets vastleggen)
ALLlogging inschakelen voor alle levels (alles vastleggen)

Elk log level heeft een integer waarde die hun severiteit bepaalt, behalve voor twee speciale log levels OFF en ALL.


Het bericht loggen

Standaard worden de bovenste drie log levels altijd gelogd. Om een ander level in te stellen, kunnen we de volgende code gebruiken:

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

In dit voorbeeld worden alleen level FINE en levels erboven ingesteld om gelogd te worden. Alle andere logberichten worden gedropt.

Nu om een bericht te loggen, gebruiken we de log() methode.

logger.log(Level.LogLevel, "log bericht"); // voorbeeld logger.log(Level.INFO, "Dit is INFO log level bericht"); 

Er zijn shorthand methoden voor logging op gewenste levels.

logger.info("Dit is INFO log level bericht"); logger.warning("Dit is WARNING log level bericht"); 

Alle logverzoeken die de ingestelde log level hebben doorstaan, worden dan doorgestuurd naar de LogRecord.

Let op: Als een logger's level ingesteld is op null, wordt het level geërfd van zijn parent en zo verder op in de boom.


2. Filters

Een filter (als het aanwezig is) bepaalt of de LogRecord doorgestuurd moet worden of niet. Zoals de naam suggereert, 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 de gespecificeerde criteria doorstaat.

// een filter instellen logger.setFilter(filter); // een filter ophalen Filter filter = logger.getFilter(); 

3. Handlers (Appenders)

De log handler of de appenders ontvangen de LogRecord en exporteren het naar verschillende targets.

Java SE biedt 5 ingebouwde handlers:

HandlersGebruik
StreamHandlerschrijft naar een OutputStream
ConsoleHandlerschrijft naar console
FileHandlerschrijft naar bestand
SocketHandlerschrijft naar remote TCP poorten
MemoryHandlerschrijft naar geheugen

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

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

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

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

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

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

Handler[] handlers = logger.getHandlers(); 

4. Formatters

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

Java SE heeft twee ingebouwde Formatters:

FormattersGebruik
SimpleFormatterformatteert LogRecord naar string
XMLFormatterformatteert LogRecord naar XML vorm

We kunnen de volgende code gebruiken om een handler te formatteren:

// formatteert naar string vorm handler.setFormatter(new SimpleFormatter()); // formatteert naar XML vorm handler.setFormatter(new XMLFormatter()); 

LogManager

Het LogManager object houdt de globale logging informatie bij. Het leest en onderhoudt de logging configuratie en de logger instanties.

De log manager is een singleton, wat betekent dat er slechts één instantie van geïnstantieerd wordt.

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

LogManager manager = LogManager.getLogManager(); 

Voordelen van Logging

Hier zijn enkele van de voordelen van logging in Java.

  • helpt bij het monitoren van de flow van het programma
  • helpt bij het vastleggen van eventuele fouten die kunnen optreden
  • biedt ondersteuning voor probleemdiagnose en debugging

Java

  1. Java Logging Meesteren: Essentiële Best Practices voor Betrouwbare Code
  2. Java-operators beheersen: typen, syntax en praktische voorbeelden
  3. Java-commentaar: typen, gebruik en best practices
  4. Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
  5. Java Strings beheersen: aanmaken, methodes en best practices
  6. Java interfaces meesteren: concepten, implementatie en best practices
  7. Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
  8. Java Try-with-resources meesteren: automatische resource management uitgelegd
  9. Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
  10. Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid
  11. Java Vector begrijpen: Gebruik, Kenmerken en Vergelijking met ArrayList