Stvaranje prilagođenog dodavača Log4j2

1. Uvod

U ovom uputstvu naučit ćemo o stvaranju prilagođenog dodavača Log4j2. Ako tražite uvod u Log4j2, pogledajte ovaj članak.

Log4j2 se isporučuje s puno ugrađenih dodataka koji se mogu koristiti u razne svrhe, poput prijavljivanja u datoteku, u bazu podataka, u utičnicu ili u NoSQL bazu podataka.

Međutim, mogla bi postojati potreba za prilagođenim dodavačem, ovisno o zahtjevima aplikacije.

Log4j2 je nadograđena verzija Log4j i ima značajna poboljšanja u odnosu na Log4j. Stoga ćemo koristiti okvir Log4j2 da bismo demonstrirali stvaranje prilagođenog dodavača.

2. Postavljanje Mavena

Trebat će nam log4j-jezgra ovisnost u našem pom.xml za početak:

 org.apache.logging.log4j log4j-core 2.11.0 

Najnovija verzija log4j-jezgra možete pronaći ovdje.

3. Prilagođeni dodavač

Postoje dva načina na koja možemo implementirati naš prilagođeni dodavač. Prvo je provedbom Napadač sučelje, a drugo je proširivanjem SažetakAppender razred. Druga metoda pruža jednostavan način za implementaciju vlastitog prilagođenog dodavača i to je ono što ćemo koristiti.

Za ovaj primjer ćemo stvoriti MapAppender. Snimit ćemo događaje iz dnevnika i pohraniti ih u IstovremenoHashMap s vremenskom oznakom za ključ.

Evo kako stvaramo MapAppender:

@Plugin (name = "MapAppender", kategorija = Core.CATEGORY_NAME, elementType = Appender.ELEMENT_TYPE) javna klasa MapAppender proširuje AbstractAppender {private ConcurrentMap eventMap = new ConcurrentHashMap (); zaštićeni MapAppender (naziv niza, filtar filtra) {super (ime, filtar, nula); } @PluginFactory javni statični MapAppender createAppender (@PluginAttribute ("name") Naziv niza, @PluginElement ("Filter") Filtar filtra) {return new MapAppender (name, filter); } @Override public void append (LogEvent event) {eventMap.put (Instant.now (). ToString (), event); }}

Obilježili smo razred s @Uključiti napomena koja ukazuje da je naš dodatak dodatak.

The Ime dodatka označava ime koje bismo naveli u konfiguraciji za upotrebu ovog dodatka. The kategorija određuje onu kategoriju u koju stavljamo dodatak. The elementType je dodatak.

Također nam je potrebna tvornička metoda koja će stvoriti dodatak. Naše createAppender metoda služi u tu svrhu i bilježi se s @PluginFactory bilješka.

Ovdje inicijaliziramo svoj dodavač pozivom zaštićenog konstruktora i prosljeđujemo raspored jednako nulan kao što nećemo pružiti nikakav izgled u konfiguracijskoj datoteci, a očekujemo da će okvir riješiti zadani izgled.

Sljedeći, nadjačali smo dodati metoda koja ima stvarnu logiku rukovanja LogEvent. U našem slučaju, dodati metoda stavlja LogEvent u naš karta događaja.

4. Konfiguracija

Sad kad imamo svoje MapAppender na mjestu, trebamo lo4j2.xml konfiguracijsku datoteku koja će koristiti ovaj dodatak za naše bilježenje.

Evo kako definiramo odjeljak za konfiguraciju u našem log4j2.xml datoteka:

Imajte na umu da bi se atribut paketa trebao pozivati ​​na paket koji sadrži vaš prilagođeni dodatak.

Dalje, u odjeljku našeg dodavača definiramo dodavača. Evo kako dodajemo svoj prilagođeni dodatak na popis dodataka u konfiguraciji:

Posljednji dio je zapravo koristiti dodatak u našem odjeljku Sjekači. Za našu provedbu koristimo MapAppender kao root logger i definirajte ga u root dijelu.

Evo kako se to radi:

5. Rukovanje pogreškama

Za rukovanje pogreškama tijekom bilježenja događaja možemo koristiti pogreška metoda naslijeđena od SažetakAppender.

Na primjer, ako ne želimo bilježiti događaje koji imaju razinu dnevnika manju od one UPOZORITI.

Možemo koristiti pogreška metoda SažetakAppender za prijavu poruke o pogrešci. Evo kako se to radi u našem razredu:

dodavanje javne praznine (događaj LogEvent) {if (event.getLevel (). isLessSpecificThan (Level.WARN)) {error ("Nije moguće prijaviti se manje od razine WARN."); povratak; } eventMap.put (Instant.now (). toString (), event); }

Promatrajte kako naš dodati metoda se sada promijenila. Provjeravamo događaja razina za veću od UPOZORITI i vraćamo se rano ako je išta manje od UPOZORITI.

6. Zaključak

U ovom smo članku vidjeli kako implementirati prilagođeni dodatak za Log4j2.

Iako postoje mnogi ugrađeni načini evidentiranja naših podataka pomoću dodataka koje pruža Log4j2, u ovom okviru imamo i alate koji nam omogućuju stvaranje vlastitog dodavača prema potrebama naše aplikacije.

Kao i obično, primjer se može naći na Githubu.


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