Introduktion til Java-logning

1. Oversigt

Logning er et kraftfuldt hjælpemiddel til forståelse og fejlretningsprograms kørselstid. Logfiler fanger og vedvarer de vigtige data og gør dem tilgængelige til analyse på ethvert tidspunkt.

Denne artikel diskuterer de mest populære java-logningsrammer, Log4j 2 og Logback sammen med deres forgænger Log4j og berører kort SLF4J, en loggningsfacade, der giver en fælles grænseflade til forskellige logningsrammer.

2. Aktivering af logning

Alle logningsrammer, der er diskuteret i artiklen, deler forestillingen om loggere, appenders og layouts. Aktivering af logning inde i projektet følger tre almindelige trin:

  1. Tilføjelse af nødvendige biblioteker
  2. Konfiguration
  3. Placering af logopgørelser

De kommende sektioner diskuterer trinene for hver ramme individuelt.

3. Log4j 2

Log4j 2 er en ny og forbedret version af Log4j-logningsrammen. Den mest overbevisende forbedring er muligheden for asynkron logning. Log4j 2 kræver følgende biblioteker:

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

Seneste version af log4j-api kan du finde her og log4j-kerne - her.

3.1. Konfiguration

Konfiguration af Log4j 2 er baseret på hovedkonfigurationen log4j.xml fil. Den første ting at konfigurere er appender.

Disse bestemmer, hvor logmeddelelsen skal dirigeres. Destination kan være en konsol, en fil, stikkontakt osv.

Log4j 2 har mange appenders til forskellige formål, du kan finde mere information på det officielle Log4j 2-sted.

Lad os se på et enkelt konfigurationseksempel:

Du kan indstille et navn til hver appender, for eksempel bruge navn konsol i stedet for stdout.

Læg mærke til Mønsterlayout element - dette bestemmer, hvordan meddelelse skal se ud. I vores eksempel indstilles mønsteret ud fra mønster param, hvor % d bestemmer datomønster, % s - output af logniveau % m - output af logget besked og % n - tilføjer nyt linjesymbol. Mere info om mønster kan du finde på den officielle Log4j 2 side.

Langt om længe - for at aktivere en appender (eller flere) skal du tilføje det til afsnit:

3.2. Logger på fil

Nogle gange skal du bruge logning til en fil, så vi tilføjer fout logger til vores konfiguration:

   % d {åååå-MM-dd HH: mm: ss}% -5p% m% nw 

Det Fil appender har flere parametre, der kan konfigureres:

  • fil - bestemmer filnavnet på logfilen
  • Tilføj - Standardværdien for denne parameter er sand, hvilket betyder at som standard a Fil appender føjes til en eksisterende fil og ikke afkortes.
  • Mønsterlayout der blev beskrevet i det foregående eksempel.

For at aktivere Fil appender skal du føje det til afsnit:

3.3. Asynkron logning

Hvis du vil gøre din Log4j 2 asynkron, skal du tilføje LMAX disruptor-bibliotek til dit pom.xml. LMAX disruptor er et låsefrit inter-thread kommunikationsbibliotek.

Tilføjelse af disruptor til pom.xml:

 com.lmax forstyrrer 3.3.4 

Seneste version af disruptor kan findes her.

Hvis du vil bruge LMAX disruptor, skal du bruge i stedet for i din konfiguration.

Eller du kan aktivere asynkron logning ved at indstille systemegenskaben Log4jContextSelector til org.apache.logging.log4j.core.async.AsyncLoggerContextSelector.

Du kan selvfølgelig læse mere om konfigurationen af ​​Log4j2 async logger og se nogle præstationsdiagrammer på den officielle Log4j2 side.

3.4. Anvendelse

Følgende er et simpelt eksempel, der demonstrerer brugen af ​​Log4j til logning:

import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; public class Log4jExample {private static Logger logger = LogManager.getLogger (Log4jExample.class); public static void main (String [] args) {logger.debug ("Fejlfindingslogmeddelelse"); logger.info ("Info logmeddelelse"); logger.error ("Fejllogmeddelelse"); }}

Efter kørsel logger applikationen følgende meddelelser til både konsol og filnavn baeldung.log:

2016-06-16 17:02:13 INFO Info-logmeddelelse 2016-06-16 17:02:13 FEJL Fejllogmeddelelse

Hvis du hæver rodlogniveauet til FEJL:

Outputtet ser ud som følger:

2016-06-16 17:02:13 FEJL Fejllogmeddelelse

Som du kan se, ændres logniveauet til den øverste parameter, at meddelelser med lavere logniveauer ikke udskrives til appenders.

Metode logger.error kan også bruges til at logge en undtagelse, der opstod:

prøv {// Her kan en undtagelse kastes} fangst (Undtagelse e) {logger.error ("Fejllogmeddelelse", kastbar); }

3.5. Konfiguration af pakkeniveau

Lad os sige, at du skal vise meddelelser med logniveau TRACE - for eksempel fra en bestemt pakke som f.eks com.baeldung.log4j2:

logger.trace ("Trace log message");

For alle andre pakker vil du kun fortsætte med at logge INFO-meddelelser.

Husk, at TRACE er lavere end rodlogniveauet INFO, som vi specificerede i konfigurationen.

For kun at kunne logge på en af ​​pakkerne skal du tilføje følgende afsnit før til din log4j.xml:

Det gør det muligt at logge på com.baeldung.log4j pakke, og din output vil se ud:

2016-06-16 17:02:13 TRACE Trace-logmeddelelse 2016-06-16 17:02:13 DEBUG Debug log-besked 2016-06-16 17:02:13 INFO Info-log-besked 2016-06-16 17:02 : 13 FEJL Fejllogmeddelelse

4. Logback

Logback er beregnet til at være en forbedret version af Log4j, udviklet af den samme udvikler, der lavede Log4j.

Logback har også mange flere funktioner sammenlignet med Log4j, hvor mange af dem også introduceres i Log4j 2. Her er et hurtigt kig på alle fordelene ved Logback på det officielle websted.

Lad os starte med at tilføje følgende afhængighed af pom.xml:

 ch.qos.logback logback-classic 1.1.7 

Denne afhængighed vil midlertidigt trække i yderligere to afhængigheder, den logback-kerne og slf4j-api. Bemærk, at den nyeste version af Logback kan findes her.

4.1. Konfiguration

Lad os nu se på et eksempel på Logback-konfiguration:

 # Console appender # Pattern of log message for console appender% d {yyyy-MM-dd HH: mm: ss}% -5p% m% n # File appender baeldung.log false # Pattern of log message for file appender% d { åååå-MM-dd HH: mm: ss}% -5p% m% n # Tilsidesæt logniveau for specificeret pakke 

Logback bruger SLF4J som interface, så du skal importere SLF4J'er Logger og LoggerFabrik.

4.2. SLF4J

SLF4J giver en fælles grænseflade og abstraktion for de fleste Java-logningsrammer. Det fungerer som en facade og leverer standardiseret API til at få adgang til de underliggende funktioner i logningsrammen.

Logback bruger SLF4J som native API for sin funktionalitet. Følgende er eksemplet ved hjælp af Logback-logning:

import org.slf4j.Logger; import org.slf4j.LoggerFactory; offentlig klasse Log4jExample {privat statisk loggerlogger = LoggerFactory.getLogger (Log4jExample.class); public static void main (String [] args) {logger.debug ("Fejlfindingslogmeddelelse"); logger.info ("Info logmeddelelse"); logger.error ("Fejllogmeddelelse"); }}

Outputtet forbliver det samme som i tidligere eksempler.

5. Log4J

Lad os endelig se på den ærværdige Log4j-logningsramme.

På dette tidspunkt er det selvfølgelig forældet, men det er værd at diskutere, da det lægger grundlaget for sine mere moderne efterfølgere.

Mange af konfigurationsoplysningerne matcher dem, der er diskuteret i Log4j 2 sektionen.

5.1. Konfiguration

Først og fremmest skal du tilføje Log4j-bibliotek til dine projekter pom.xml:

 log4j log4j 1.2.17 

Her skal du kunne finde den nyeste version af Log4j.

Lad os se på et komplet eksempel på enkel Log4j-konfiguration med kun en konsolappender:

er åbent tag for hele konfigurationen, som har en egenskab - fejlfinde. Det bestemmer, om du vil føje Log4j-fejlretningsoplysninger til logfiler.

5.2. Anvendelse

Når du har tilføjet Log4j bibliotek og konfiguration, kan du bruge logger i din kode. Lad os se på et simpelt eksempel:

import org.apache.log4j.Logger; offentlig klasse Log4jExample {privat statisk Logger-logger = Logger.getLogger (Log4jExample.class); public static void main (String [] args) {logger.debug ("Fejlfindingslogmeddelelse"); logger.info ("Info logmeddelelse"); logger.error ("Fejllogmeddelelse"); }}

6. Konklusion

Denne artikel viser meget enkle eksempler på, hvordan du kan bruge forskellige logningsrammer som Log4j, Log4j2 og Logback. Det dækker enkle konfigurationseksempler til alle de nævnte rammer.

Eksemplerne, der ledsager artiklen, kan findes på GitHub.