Programos konfigurálás a Log4j 2-vel

1. Bemutatkozás

Ebben az oktatóanyagban megvizsgáljuk az Apache Log4j 2 programozott konfigurálásának különböző módjait.

2. Kezdeti beállítás

A Log4j 2 használatának megkezdéséhez csupán a log4j-core és a log4j-slf4j-impl függőségeket kell felvennünk a pom.xml:

 org.apache.logging.log4j log4j-core 2.11.0 org.apache.logging.log4j log4j-slf4j-impl 2.11.0 

3. ConfigurationBuilder

Miután konfiguráltuk Maven-t, létre kell hoznunk a ConfigurationBuilder, amely az az osztály, amely lehetővé teszi számunkra a konfigurálást függelékek, szűrők, elrendezések, és fakitermelők.

A Log4j 2 számos módot kínál a ConfigurationBuilder.

Kezdjük a legközvetlenebb módon:

ConfigurationBuilder builder = ConfigurationBuilderFactory.newConfigurationBuilder ();

Az összetevők konfigurálásának megkezdéséhez ConfigurationBuilder megfelelővel van felszerelve új módszer, mint newAppender vagy newLayout, minden alkatrészre.

Néhány alkatrésznek különböző altípusai vannak, például FileAppender vagy ConsoleAppender, és ezekre az API-ban hivatkoznak bővítmények.

3.1. A Függelék konfigurálása

Mondjuk el a építész hová küldje el az egyes naplósorokat egy appender:

AppenderComponentBuilder konzol = builder.newAppender ("stdout", "Console"); builder.add (konzol); AppenderComponentBuilder fájl = builder.newAppender ("napló", "Fájl"); file.addAttribute ("fájlnév", "cél / naplózás.log"); builder.add (fájl);

Míg a legtöbb új a módszerek ezt nem támogatják, newAppender (név, bővítmény) lehetővé teszi számunkra, hogy nevet adjunk a pályázónak, ami később fontosnak bizonyul. Ezeket a hozzátartozókat hívtuk stdout és napló, bár bármit megnevezhetnénk nekik.

Azt is elmondtuk a építész melyik függelék csatlakoztat (vagy egyszerűbben: melyik függeléket kell használni). Konzol és File olvassa el a Log4j 2 függelékeit a szabványos és a fájlrendszerhez való íráshoz.

Bár a Log4j 2 számos függeléket támogat, konfigurálása a Java használatával kissé bonyolult lehet, mivel AppenderComponentBuilder egy általános osztály az összes appender típushoz.

Ez olyan módszerekkel rendelkezik, mint addAttribute és addComponent ahelyett setFileName és addTriggeringPolicy:

AppenderComponentBuilder rollingFile = builder.newAppender ("gördülő", "RollingFile"); rollingFile.addAttribute ("fájlnév", "gördülő.log"); rollingFile.addAttribute ("filePattern", "rolling-% d {MM-dd-yy} .log.gz"); builder.add (rollingFile); 

És végül, ne felejtsd el felhívni építő.add hogy hozzáfűzze a fő konfigurációhoz!

3.2. A szűrők konfigurálása

Hozzáadhatunk szűrőket minden függelékünkhöz, amelyek minden naplósoron eldöntik, hogy hozzá kell-e fűzni.

Használjuk a MarkerFilter plugin a konzolos alkalmazásunkon:

FilterComponentBuilder flow = builder.newFilter ("MarkerFilter", Filter.Result.ACCEPT, Filter.Result.DENY); flow.addAttribute ("marker", "FLOW"); konzol.add (flow);

Vegye figyelembe, hogy ez új A módszer nem engedi megnevezni a szűrőt, de arra kéri, hogy jelezzük, mit kell tennünk, ha a szűrő elhalad vagy nem sikerül.

Ebben az esetben egyszerűek voltunk, kijelentve, hogy ha a MarkerFilter akkor passzol ELFOGAD a logline. Másképp, TAGADNI azt.

Ebben az esetben vegye figyelembe, hogy ezt nem csatoljuk a építész hanem ehelyett a mellékletekhez, hogy ezt a szűrőt szeretnénk használni.

3.3. Elrendezések konfigurálása

Ezután határozzuk meg az egyes naplósorok elrendezését. Ebben az esetben a PatternLayout csatlakoztat:

LayoutComponentBuilder standard = builder.newLayout ("PatternLayout"); standard.addAttribute ("minta", "% d [% t]% -5szint:% msg% n% dobható"); konzol.add (standard); file.add (standard); gördülő.add (standard);

Ismét hozzáadtuk ezeket közvetlenül a megfelelő függelékekhez a építész közvetlenül.

3.4. A Root Logger konfigurálása

Most, hogy tudjuk, hová kerülnek a naplók, be akarjuk állítani, hogy mely naplók kerüljenek az egyes célállomásokhoz.

A gyökérnaplózó a legmagasabb naplózó, hasonló Tárgy Java-ban. Alapértelmezés szerint ezt a naplózót használják, hacsak nem írják felül.

Tehát használjunk gyökérnaplózót az alapértelmezett naplózási szint beállításához HIBA és a mi alapértelmezett melléklete stdout appender felülről:

RootLoggerComponentBuilder rootLogger = builder.newRootLogger (Level.ERROR); rootLogger.add (builder.newAppenderRef ("stdout")); builder.add (rootLogger);

Ha a naplózónkat egy adott alkalmazásra mutatjuk, nem adunk neki példát az építtetőről. Helyette, arra hivatkozunk név hogy korábban adtuk.

3.5. További naplók konfigurálása

A gyermeknaplózók felhasználhatók konkrét csomagok vagy naplózónevek megcélozására.

Adjunk hozzá egy naplót a com csomagot az alkalmazásunkban, beállítva a naplózási szintet HIBÁK és hogy azok menjenek a miénkbe napló appender:

LoggerComponentBuilder logger = builder.newLogger ("com", Level.DEBUG); logger.add (builder.newAppenderRef ("log")); logger.addAttribute ("additivitás", hamis); builder.add (naplózó);

Vegye figyelembe, hogy beállíthatjuk additivitás naplózóinkkal, ami jelzi, hogy ennek a naplózónak meg kell-e örökölnie az őseitől az olyan tulajdonságokat, mint a naplózási szint és a függelék típusok.

3.6. Más alkatrészek konfigurálása

Nem minden alkatrész rendelkezik külön dedikálással új módszer be ConfigurationBuilder.

Tehát ebben az esetben hívunk newComponent.

Például azért, mert nincs a TriggeringPolicyComponentBuilder, használnunk kell newComponent valami olyasmi, mint a fájlfüggelékek görgetésére vonatkozó kiváltó irányelvünk megadása:

ComponentBuilder triggeringPolicies = builder.newComponent ("házirendek") .addComponent (builder.newComponent ("CronTriggeringPolicy") .addAttribute ("ütemezés", "0 0 0 * *?")) .AddComponent (builder.negCompon .addAttribute ("méret", "100M"); gördülő.addComponent (triggeringPolicies);

3.7. Az XML egyenértékű

ConfigurationBuilder praktikus módszerrel van felszerelve az egyenértékű XML kinyomtatásához:

builder.writeXmlConfiguration (System.out);

A fenti sor futtatása kinyomtatja:

Ez jól jön, ha ellenőrizni akarjuk a konfigurációnkat, vagy ha meg akarjuk tartani a konfigurációnkat, mondjuk a fájlrendszerben.

3.8. Összedobva az egészet

Most, hogy teljesen konfiguráltuk, mondjuk a Log4j 2-nek, hogy használja a konfigurációnkat:

Configurator.initialize (builder.build ());

Miután erre hivatkozunk, a jövőben a Log4j 2-re irányuló hívások a konfigurációnkat használják.

Ne feledje, hogy ez azt jelenti, hogy meg kell hívnunk Configurator.inicialize mielőtt felhívnánk LogManager.getLogger.

4. ConfigurationFactory

Most, hogy láttunk egy módot a ConfigurationBuilder, nézzünk még egyet:

public class CustomConfigFactory kiterjeszti a ConfigurationFactory {public Configuration createConfiguration (LoggerContext kontextus, ConfigurationSource src) {ConfigurationBuilder builder = super .newConfigurationBuilder (); // ... a függelékek, szűrők stb. konfigurálása return builder.build (); } public String [] getSupportedTypes () {return new String [] {"*"}; }}

Ebben az esetben a használat helyett ConfigurationBuilderFactory, alosztályba soroltuk ConfigurationFactory, egy absztrakt osztály, amelynek célja a Konfiguráció.

Aztán ahelyett, hogy telefonálna Configurator.inicialize csakúgy, mint az első alkalommal, egyszerűen tájékoztatnunk kell a Log4j 2-t az új konfigurációs gyárunkról.

Ennek három módja van:

  • Statikus inicializálás
  • Futásidejű tulajdonság, ill
  • A @Csatlakoztat annotáció

4.1. Használja a Statikus inicializálást

A Log4j 2 támogatja a hívást setConfigurationFactory a statikus inicializálás során:

statikus {ConfigurationFactory custom = new CustomConfigFactory (); ConfigurationFactory.setConfigurationFactory (egyedi); }

Ennek a megközelítésnek ugyanolyan korlátai vannak, mint a legutóbb látott megközelítésnek, vagyis meg kell hívnunk hívás előtt LogManager.getLogger.

4.2. Használjon futásidejű tulajdonságot

Ha hozzáférünk a Java indítási parancshoz, akkor a Log4j 2 támogatja a ConfigurationFactory a-n keresztül használni -D paraméter:

-Dlog4j2.configurationFactory = com.baeldung.log4j2.CustomConfigFactory

A megközelítés legfőbb előnye, hogy nem kell aggódnunk az inicializálási sorrend miatt, mint az első két megközelítésnél.

4.3. Használja a @Csatlakoztat Megjegyzés

És végül olyan körülmények között, amikor nem akarunk a Java indítási paranccsal babrálni a hozzáadásával -D, egyszerűen megjegyezhetjük CustomConfigurationFactory a Log4j 2-vel @Csatlakoztat kommentár:

@Plugin (név = "CustomConfigurationFactory", kategória = ConfigurationFactory.CATEGORY) @Order (50) public class A CustomConfigFactory kiterjeszti a ConfigurationFactory {// ... a megvalósítás többi részét}

A Log4j 2 megvizsgálja az osztályútvonalat azon osztályok számára, amelyeknek van @Csatlakoztat megjegyzés, és, megtalálja ezt az osztályt a ConfigurationFactory kategóriában fogja használni.

4.4. Kombinálás statikus konfigurációval

További előnye az a használatának ConfigurationFactory kiterjesztés az, hogy az egyedi konfigurációkat könnyen kombinálhatjuk más konfigurációs forrásokkal, például az XML-lel:

public Configuration createConfiguration (LoggerContext context, ConfigurationSource src) {return new WithXmlConfiguration (context, src); } 

A forrás A paraméter a statikus XML vagy JSON konfigurációs fájlt jelenti, amelyet a Log4j 2 talál, ha van ilyen.

Foghatjuk azt a konfigurációs fájlt, és elküldhetjük a XmlConfiguration ahová a szükséges átfogó konfigurációt elhelyezhetjük:

a WithXmlConfiguration nyilvános osztály kiterjeszti az XmlConfiguration beállítást {@Orride protected void doConfigure () {super.doConfigure (); // xml dokumentum elemzése // ... adja hozzá az egyéni konfigurációt}}

5. Következtetés

Ebben a cikkben megvizsgáltuk az új használatát ConfigurationBuilder A Log4j 2-ben elérhető API.

Megnéztük a testreszabást is ConfigurationFactory kombinálva valamivel ConfigurationBuilder fejlettebb használati esetekre.

Ne felejtsd el megnézni a teljes példáimat a GitHubon.