Oprettelse af en brugerdefineret Log4j2 Appender

1. Introduktion

I denne vejledning lærer vi om oprettelse af en brugerdefineret Log4j2 appender. Hvis du leder efter introduktionen til Log4j2, skal du se på denne artikel.

Log4j2 leveres med mange indbyggede appenders som kan bruges til forskellige formål såsom logning til en fil, til en database, til en sokkel eller til en NoSQL-database.

Der kan dog være behov for en brugerdefineret appender afhængigt af applikationens krav.

Log4j2 er en opgraderet version af Log4j og har betydelige forbedringer i forhold til Log4j. Derfor bruger vi Log4j2-rammen til at demonstrere oprettelsen af ​​en brugerdefineret appender.

2. Maven-opsætning

Vi har brug for log4j-kerne afhængighed i vores pom.xml til at begynde med:

 org.apache.logging.log4j log4j-core 2.11.0 

Den seneste version log4j-kerne kan findes her.

3. Brugerdefineret appender

Der er to måder, hvorpå vi kan implementere vores brugerdefinerede appender. Først er ved at implementere Appender interface og den anden er ved at udvide AbstractAppender klasse. Den anden metode giver en enkel måde at implementere vores egen brugerdefinerede appender på, og det er det, vi vil bruge.

Til dette eksempel opretter vi en MapAppender. Vi registrerer loghændelserne og gemmer dem i en SamtidigHashMap med tidsstemplet for nøglen.

Sådan opretter vi MapAppender:

@Plugin (name = "MapAppender", category = Core.CATEGORY_NAME, elementType = Appender.ELEMENT_TYPE) offentlig klasse MapAppender udvider AbstractAppender {private ConcurrentMap eventMap = ny ConcurrentHashMap (); beskyttet MapAppender (strengnavn, filterfilter) {super (navn, filter, null); } @PluginFactory offentlig statisk MapAppender createAppender (@PluginAttribute ("navn") Strengnavn, @PluginElement ("Filter") Filterfilter) {returner nyt MapAppender (navn, filter); } @ Override public void append (LogEvent event) {eventMap.put (Instant.now (). ToString (), event); }}

Vi har kommenteret klassen med @Plugin kommentar, der indikerer, at vores appender er et plugin.

Det navn af pluginet betyder det navn, vi ville give i konfigurationen for at bruge denne appender. Det kategori angiver den kategori, hvor vi placerer pluginet. Det elementType er appender.

Vi har også brug for en fabriksmetode, der opretter appenderen. Vores createAppender metoden tjener dette formål og er kommenteret med @PluginFactory kommentar.

Her initialiserer vi vores appender ved at ringe til den beskyttede konstruktør, og vi passerer layout så nul, da vi ikke giver noget layout i konfigurationsfilen, og vi forventer, at rammen løser standardlayoutet.

Næste, vi har tilsidesat Tilføj metode, der har den faktiske logik i håndtering af LogEvent. I vores tilfælde er Tilføj metode sætter LogEvent ind i vores eventMap.

4. Konfiguration

Nu hvor vi har vores MapAppender på plads, har vi brug for en lo4j2.xml konfigurationsfil for at bruge denne appender til vores logning.

Sådan definerer vi konfigurationsafsnittet i vores log4j2.xml fil:

Bemærk, at pakkeattributten skal henvise til den pakke, der indeholder din brugerdefinerede appender.

Dernæst definerer vi i vores appenders sektion appender. Sådan føjer vi vores brugerdefinerede appender til listen over appenders i konfigurationen:

Den sidste del er faktisk at bruge appenderen i vores loggersektion. Til vores implementering bruger vi MapAppender som en rodlogger og definer den i rodafsnittet.

Sådan gøres det:

5. Fejlhåndtering

For at håndtere fejl under logning af begivenheden kan vi bruge fejl metode arvet fra AbstractAppender.

For eksempel, hvis vi ikke vil logge begivenheder, der har et logniveau, der er mindre end det for ADVARE.

Vi kan bruge fejl metode til AbstractAppender for at logge en fejlmeddelelse. Sådan gøres det i vores klasse:

public void append (LogEvent event) {if (event.getLevel (). isLessSpecificThan (Level.WARN)) {error ("Kan ikke logge mindre end WARN-niveau."); Vend tilbage; } eventMap.put (Instant.now (). toString (), event); }

Overhold hvordan vores Tilføj metoden er ændret nu. Vi tjekker begivenheder niveau for at være større end ADVARE og vi vender tilbage tidligt, hvis det er noget mindre end ADVARE.

6. Konklusion

I denne artikel har vi set, hvordan man implementerer en brugerdefineret appender til Log4j2.

Mens der er mange indbyggede måder at logge vores data på ved hjælp af Log4j2's leverede appenders, har vi også værktøjer i denne ramme, der gør det muligt for os at oprette vores egen appender efter vores applikationsbehov.

Som sædvanligt kan eksemplet findes på Github.


$config[zx-auto] not found$config[zx-overlay] not found