Opprette en tilpasset Log4j2 Appender

1. Introduksjon

I denne opplæringen lærer vi om å lage en tilpasset Log4j2 appender. Hvis du leter etter introduksjonen til Log4j2, kan du ta en titt på denne artikkelen.

Log4j2 leveres med mange innebygde appenders som kan brukes til forskjellige formål, for eksempel logging til en fil, til en database, til en stikkontakt eller til en NoSQL-database.

Det kan imidlertid være behov for en tilpasset appender, avhengig av applikasjonskravene.

Log4j2 er en oppgradert versjon av Log4j og har betydelige forbedringer i forhold til Log4j. Derfor bruker vi Log4j2-rammeverket for å demonstrere etableringen av en tilpasset appender.

2. Maven-oppsett

Vi trenger log4j-kjerne avhengighet i vår pom.xml til å begynne med:

 org.apache.logging.log4j log4j-core 2.11.0 

Den nyeste versjonen log4j-kjerne finner du her.

3. Tilpasset appender

Det er to måter vi kan implementere vår tilpassede appender på. Først er ved å implementere Appender grensesnittet og det andre er ved å utvide AbstractAppender klasse. Den andre metoden gir en enkel måte å implementere vår egen tilpassede appender på, og det er det vi vil bruke.

For dette eksemplet skal vi lage en MapAppender. Vi vil fange logghendelsene og lagre dem i en SamtidigHashMap med tidsstempelet for nøkkelen.

Slik lager vi MapAppender:

@Plugin (name = "MapAppender", category = Core.CATEGORY_NAME, elementType = Appender.ELEMENT_TYPE) offentlig klasse MapAppender utvider 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 nytt MapAppender (navn, filter); } @ Override public void append (LogEvent event) {eventMap.put (Instant.now (). ToString (), event); }}

Vi har kommentert klassen med @Plugg inn kommentar som indikerer at vår appender er et plugin.

De Navn av pluginet betyr navnet vi vil gi i konfigurasjonen for å bruke denne appenderen. De kategori spesifiserer hvilken kategori vi plasserer pluginet under. De elementType er appender.

Vi trenger også en fabrikkmetode som vil lage appender. Våre createAppender metoden tjener dette formålet og er kommentert med @PluginFactory kommentar.

Her initialiserer vi appenderen vår ved å ringe den beskyttede konstruktøren, og vi passerer oppsett så null som vi ikke skal gi noen layout i konfigurasjonsfilen, og vi forventer at rammeverket løser standardoppsettet.

Neste, vi har overstyrt legge til metoden som har den faktiske logikken for å håndtere LogEvent. I vårt tilfelle er legge til metoden setter LogEvent inn i vår eventMap.

4. Konfigurasjon

Nå som vi har vår MapAppender på plass, trenger vi en lo4j2.xml konfigurasjonsfilen for å bruke denne appenderen til loggføring.

Slik definerer vi konfigurasjonsdelen i vår log4j2.xml fil:

Merk at pakkeattributtet skal henvise til pakken som inneholder den egendefinerte appen.

Deretter, i vår appenderseksjon, definerer vi appender. Slik legger vi til vår egendefinerte appender i listen over appenders i konfigurasjonen:

Den siste delen er å bruke appenderen i delen Loggers. For vår implementering bruker vi MapAppender som en rotlogger og definer den i rotdelen.

Slik gjør du det:

5. Feilhåndtering

For å håndtere feil mens vi logger på hendelsen kan vi bruke feil metode arvet fra AbstractAppender.

For eksempel hvis vi ikke vil logge hendelser som har et loggnivå som er mindre enn det for VARSLE.

Vi kan bruke feil Metode av AbstractAppender for å logge en feilmelding. Slik gjøres det i klassen vår:

public void append (LogEvent event) {if (event.getLevel (). isLessSpecificThan (Level.WARN)) {error ("Kan ikke logge mindre enn WARN-nivå."); komme tilbake; } eventMap.put (Instant.now (). toString (), event); }

Observer hvordan vår legge til metoden har endret seg nå. Vi sjekker arrangementer nivå for å være større enn VARSLE og vi kommer tilbake tidlig hvis det er noe mindre enn VARSLE.

6. Konklusjon

I denne artikkelen har vi sett hvordan du implementerer en tilpasset appender for Log4j2.

Selv om det er mange innebygde måter å logge på dataene våre ved å bruke Log4j2s tilførte appenders, har vi også verktøy i dette rammeverket som gjør det mulig for oss å lage vår egen appender i henhold til applikasjonsbehovet vårt.

Som vanlig finner du eksemplet på Github.


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