Een aangepaste Log4j2-appender maken

1. Inleiding

In deze zelfstudie leren we hoe u een aangepaste Log4j2-appender maakt. Als u op zoek bent naar de introductie van Log4j2, bekijk dan dit artikel.

Log4j2 wordt geleverd met veel ingebouwde appenders die voor verschillende doeleinden kan worden gebruikt, zoals inloggen op een bestand, een database, een socket of een NoSQL-database.

Er kan echter behoefte zijn aan een aangepaste appender, afhankelijk van de toepassingsvereisten.

Log4j2 is een verbeterde versie van Log4j en heeft aanzienlijke verbeteringen ten opzichte van Log4j. Daarom gebruiken we het Log4j2-framework om de creatie van een aangepaste appender te demonstreren.

2. Maven-instellingen

We hebben de log4j-core afhankelijkheid in onze pom.xml om te beginnen met:

 org.apache.logging.log4j log4j-core 2.11.0 

De laatste versie log4j-core vind je hier.

3. Aangepaste toevoeging

Er zijn twee manieren waarop we onze aangepaste appender kunnen implementeren. De eerste is door het implementeren van het Appender interface en de tweede is door de extensie SamenvattingAppender klasse. De tweede methode biedt een eenvoudige manier om onze eigen aangepaste appender te implementeren en dat is wat we zullen gebruiken.

Voor dit voorbeeld gaan we een MapAppender. We leggen de logboekgebeurtenissen vast en slaan ze op in een GelijktijdigHash kaart met het tijdstempel voor de sleutel.

Hier is hoe we het MapAppender:

@Plugin (name = "MapAppender", categorie = Core.CATEGORY_NAME, elementType = Appender.ELEMENT_TYPE) openbare klasse MapAppender breidt AbstractAppender uit {private ConcurrentMap eventMap = nieuwe ConcurrentHashMap (); beschermde MapAppender (Stringnaam, Filterfilter) {super (naam, filter, null); } @PluginFactory openbare statische MapAppender createAppender (@PluginAttribute ("naam") Stringnaam, @PluginElement ("Filter") Filterfilter) {retourneer nieuwe MapAppender (naam, filter); } @Override public void append (LogEvent-gebeurtenis) {eventMap.put (Instant.now (). ToString (), event); }}

We hebben de klas geannoteerd met de @Inpluggen annotatie die aangeeft dat onze appender een plug-in is.

De naam van de plug-in geeft de naam aan die we zouden opgeven in de configuratie om deze appender te gebruiken. De categorie specificeert de categorie waaronder we de plug-in plaatsen. De elementType is appender.

We hebben ook een fabrieksmethode nodig die de appender zal maken. Onze createAppender methode dient dit doel en is geannoteerd met de @BuienRadarNL annotatie.

Hier initialiseren we onze appender door de beschermde constructor aan te roepen en we geven de indeling net zo nul als we geen lay-out in het configuratiebestand gaan geven en we verwachten dat het framework de standaardlay-out oplost.

De volgende, we hebben de toevoegen methode die de feitelijke logica heeft van het omgaan met de LogEvent. In ons geval is de toevoegen methode zet de LogEvent in onze eventMap.

4. Configuratie

Nu we onze hebben MapAppender op zijn plaats hebben we een lo4j2.xml configuratiebestand om deze appender te gebruiken voor onze logboekregistratie.

Hier is hoe we het configuratiegedeelte in ons log4j2.xml het dossier:

Merk op dat het pakketkenmerk moet verwijzen naar het pakket dat uw aangepaste appender bevat.

Vervolgens definiëren we in het gedeelte van onze appender de appender. Hier is hoe we onze aangepaste appender toevoegen aan de lijst met appenders in de configuratie:

Het laatste deel is om de appender daadwerkelijk te gebruiken in onze Loggers-sectie. Voor onze implementatie gebruiken we MapAppender als root-logger en definieer het in de root-sectie.

Hier is hoe het moet:

5. Foutafhandeling

Om fouten af ​​te handelen tijdens het loggen van de gebeurtenis, kunnen we de fout methode geërfd van SamenvattingAppender.

Als we bijvoorbeeld geen gebeurtenissen willen loggen die een logniveau hebben dat lager is dan dat van WAARSCHUWEN.

We kunnen de fout methode van SamenvattingAppender om een ​​foutmelding vast te leggen. Hier is hoe het wordt gedaan in onze klas:

public void append (LogEvent-gebeurtenis) {if (event.getLevel (). isLessSpecificThan (Level.WARN)) {fout ("Kan niet loggen op minder dan WARN-niveau."); terugkeren; } eventMap.put (Instant.now (). toString (), evenement); }

Kijk hoe onze toevoegen methode is nu veranderd. We controleren de evenementen niveau om groter te zijn dan WAARSCHUWEN en we keren vroeg terug als het iets minder is dan WAARSCHUWEN.

6. Conclusie

In dit artikel hebben we gezien hoe u een aangepaste appender voor Log4j2 implementeert.

Hoewel er veel ingebouwde manieren zijn om onze gegevens te loggen met behulp van de door Log4j2 geleverde appenders, hebben we ook tools in dit framework waarmee we onze eigen appender kunnen maken volgens onze applicatiebehoeften.

Zoals gewoonlijk is het voorbeeld te vinden op Github.