Inleiding tot Java-logboekregistratie

1. Overzicht

Logboekregistratie is een krachtig hulpmiddel voor het begrijpen en debuggen van het run-time gedrag van programma's. Logboeken leggen de belangrijke gegevens vast, bewaren deze en maken deze op elk moment beschikbaar voor analyse.

Dit artikel bespreekt de meest populaire java-logging-frameworks, Log4j 2 en Logback, samen met hun voorganger Log4j, en gaat kort in op SLF4J, een logging-façade die een gemeenschappelijke interface biedt voor verschillende logging-frameworks.

2. Logboekregistratie inschakelen

Alle logging-frameworks die in het artikel worden besproken, delen de notie van loggers, appenders en lay-outs. Het inschakelen van logboekregistratie binnen het project volgt drie algemene stappen:

  1. Benodigde bibliotheken toevoegen
  2. Configuratie
  3. Logboekinstructies plaatsen

In de komende secties worden de stappen voor elk raamwerk afzonderlijk besproken.

3. Log4j 2

Log4j 2 is een nieuwe en verbeterde versie van het Log4j-framework voor logboekregistratie. De meest overtuigende verbetering is de mogelijkheid van asynchrone logboekregistratie. Log4j 2 vereist de volgende bibliotheken:

 org.apache.logging.log4j log4j-api 2.6.1 org.apache.logging.log4j log4j-core 2.6.1 

Laatste versie van log4j-api vind je hier en log4j-core - hier.

3.1. Configuratie

Het configureren van Log4j 2 is gebaseerd op de hoofdconfiguratie log4j.xml het dossier. Het eerste dat u moet configureren, is de appender.

Deze bepalen waar het logbericht naartoe wordt gestuurd. De bestemming kan een console, een bestand, een socket, enz. Zijn.

Log4j 2 heeft veel appenders voor verschillende doeleinden, u kunt meer informatie vinden op de officiële Log4j 2-site.

Laten we eens kijken naar een eenvoudig configuratievoorbeeld:

U kunt voor elke appender een naam instellen, bijvoorbeeld een naam gebruiken troosten in plaats van stdout.

Let op de PatternLayout element - dit bepaalt hoe het bericht eruit moet zien. In ons voorbeeld is het patroon ingesteld op basis van de patroon param, waar % d bepaalt datumpatroon, % p - output van log-niveau, % m - uitvoer van gelogd bericht en % n - voegt een nieuw lijnsymbool toe. Meer informatie over het patroon kun je vinden op de officiële Log4j 2-pagina.

Tenslotte - om een ​​appender in te schakelen (of meerdere) waaraan u het moet toevoegen sectie:

3.2. Logboekregistratie naar bestand

Soms moet u logboekregistratie naar een bestand gebruiken, dus zullen we toevoegen fout logger naar onze configuratie:

   % d {jjjj-MM-dd UU: mm: ss}% -5p% m% nw 

De het dossier appender hebben verschillende parameters die kunnen worden geconfigureerd:

  • het dossier - bepaalt de bestandsnaam van het logbestand
  • toevoegen - De standaardwaarde voor deze parameter is true, wat betekent dat standaard een het dossier appender zal aan een bestaand bestand worden toegevoegd en het niet afkappen.
  • PatternLayout dat werd beschreven in het vorige voorbeeld.

Om in te schakelen het dossier appender waaraan u het moet toevoegen sectie:

3.3. Asynchrone logboekregistratie

Als u uw Log4j 2 asynchroon wilt maken, moet u de LMAX-disruptorbibliotheek toevoegen aan uw pom.xml. LMAX-disruptor is een lock-free inter-thread communicatiebibliotheek.

Disruptor toevoegen aan pom.xml:

 com.lmax disruptor 3.3.4 

De nieuwste versie van disruptor is hier te vinden.

Als u LMAX-disruptor wilt gebruiken, moet u in plaats van in uw configuratie.

Of u kunt asynchrone logboekregistratie inschakelen door de systeemeigenschap in te stellen Log4jContextSelector naar org.apache.logging.log4j.core.async.AsyncLoggerContextSelector.

U kunt natuurlijk meer lezen over de configuratie van de Log4j2 asynchrone logger en enkele prestatiediagrammen bekijken op de officiële pagina van Log4j2.

3.4. Gebruik

Het volgende is een eenvoudig voorbeeld dat het gebruik van Log4j voor logboekregistratie laat zien:

importeer org.apache.logging.log4j.Logger; importeer org.apache.logging.log4j.LogManager; openbare klasse Log4jExample {privé statische Logger-logger = LogManager.getLogger (Log4jExample.class); public static void main (String [] args) {logger.debug ("Debug logbericht"); logger.info ("Info logbericht"); logger.error ("Foutenlogboekbericht"); }}

Na het uitvoeren zal de applicatie de volgende berichten registreren op zowel de console als het bestand met de naam baeldung.log:

2016-06-16 17:02:13 INFO Info logbericht 2016-06-16 17:02:13 FOUT Foutlogbericht

Als u het rootlog-niveau verhoogt naar FOUT:

De uitvoer ziet er als volgt uit:

2016-06-16 17:02:13 FOUT Foutlogboekbericht

Zoals u kunt zien, zorgt het wijzigen van het logniveau naar de bovenste parameter ervoor dat de berichten met lagere logniveaus niet worden afgedrukt naar toevoegers.

Methode logger.error kan ook worden gebruikt om een ​​opgetreden uitzondering vast te leggen:

probeer {// Hier kan een uitzondering worden gegenereerd} catch (Uitzondering e) {logger.error ("Foutlogbericht", throwable); }

3.5. Configuratie op pakketniveau

Stel dat u berichten met het logboekniveau TRACE moet weergeven - bijvoorbeeld van een specifiek pakket zoals com.baeldung.log4j2:

logger.trace ("Traceringslogbericht");

Voor alle andere pakketten wilt u alleen INFO-berichten blijven loggen.

Houd er rekening mee dat TRACE lager is dan het INFO op rootlogniveau dat we in de configuratie hebben gespecificeerd.

Om logboekregistratie voor slechts één van de pakketten in te schakelen, moet u eerst de volgende sectie toevoegen aan jouw log4j.xml:

Het zal loggen inschakelen voor com.baeldung.log4j pakket en je output ziet er als volgt uit:

2016-06-16 17:02:13 TRACE Traceerlogbericht 2016-06-16 17:02:13 DEBUG Foutopsporingslogboekbericht 2016-06-16 17:02:13 INFO Info logbericht 2016-06-16 17:02 : 13 FOUT Foutlogbericht

4. Inloggen

Logback is bedoeld als een verbeterde versie van Log4j, ontwikkeld door dezelfde ontwikkelaar die Log4j heeft gemaakt.

Logback heeft ook veel meer functies in vergelijking met Log4j, waarvan er veel ook in Log4j 2 worden geïntroduceerd. Hier is een korte blik op alle voordelen van Logback op de officiële site.

Laten we beginnen met het toevoegen van de volgende afhankelijkheid aan het pom.xml:

 ch.qos.logback logback-classic 1.1.7 

Deze afhankelijkheid zal tijdelijk nog twee afhankelijkheden binnenhalen, de logback-core en slf4j-api. Merk op dat de laatste versie van Logback hier te vinden is.

4.1. Configuratie

Laten we nu eens kijken naar een Logback-configuratievoorbeeld:

 # Console appender # Patroon van logbericht voor console appender% d {jjjj-MM-dd HH: mm: ss}% -5p% m% n # File appender baeldung.log false # Patroon van logbericht voor file appender% d { jjjj-MM-dd UU: mm: ss}% -5p% m% n # Logboekniveau voor opgegeven pakket overschrijven 

Logback gebruikt SLF4J als een interface, dus u moet SLF4J's importeren Logger en LoggerFactory.

4.2. SLF4J

SLF4J biedt een gemeenschappelijke interface en abstractie voor de meeste Java-frameworks voor logboekregistratie. Het fungeert als een façade en biedt een gestandaardiseerde API voor toegang tot de onderliggende functies van het logboekframework.

Logback gebruikt SLF4J als native API voor zijn functionaliteit. Hieronder ziet u het voorbeeld waarin Logback-logboekregistratie wordt gebruikt:

importeer org.slf4j.Logger; importeer org.slf4j.LoggerFactory; openbare klasse Log4jExample {privé statische Logger-logger = LoggerFactory.getLogger (Log4jExample.class); public static void main (String [] args) {logger.debug ("Debug logbericht"); logger.info ("Info logbericht"); logger.error ("Foutenlogboekbericht"); }}

De uitvoer blijft hetzelfde als in eerdere voorbeelden.

5. Log4J

Laten we tot slot eens kijken naar het eerbiedwaardige Log4j-framework voor logboekregistratie.

Op dit moment is het natuurlijk verouderd, maar het is de moeite waard om te bespreken, omdat het de basis legt voor zijn modernere opvolgers.

Veel van de configuratiedetails komen overeen met die besproken in de Log4j 2-sectie.

5.1. Configuratie

Allereerst moet u de Log4j-bibliotheek aan uw projecten toevoegen pom.xml:

 log4j log4j 1.2.17 

Hier zou u de nieuwste versie van Log4j moeten kunnen vinden.

Laten we eens kijken naar een compleet voorbeeld van een eenvoudige Log4j-configuratie met slechts één console-appender:

is een open tag van de hele configuratie die één eigenschap heeft - debuggen. Het bepaalt of u Log4j-foutopsporingsinformatie aan logboeken wilt toevoegen.

5.2. Gebruik

Nadat u de Log4j-bibliotheek en configuratie heeft toegevoegd, kunt u logger in uw code gebruiken. Laten we eens kijken naar een eenvoudig voorbeeld:

importeer org.apache.log4j.Logger; openbare klasse Log4jExample {privé statische Logger-logger = Logger.getLogger (Log4jExample.class); public static void main (String [] args) {logger.debug ("Debug logbericht"); logger.info ("Info logbericht"); logger.error ("Foutenlogboekbericht"); }}

6. Conclusie

Dit artikel toont zeer eenvoudige voorbeelden van hoe u verschillende logging-frameworks kunt gebruiken, zoals Log4j, Log4j2 en Logback. Het behandelt eenvoudige configuratievoorbeelden voor alle genoemde frameworks.

De voorbeelden die bij het artikel horen, zijn te vinden op GitHub.