Útmutató a fájlfüggelékek görgetéséhez

1. Áttekintés

Míg a naplófájlok gyakran hasznos információkat közvetítenek, az idő múlásával természetesen nagyobbak lesznek, és ha korlátlanul növekedni hagyják őket, méretük problémát jelenthet.

A naplózási könyvtárak segítségével a probléma megoldható gördülő fájlmellékletek, amelyek automatikusan „tekercselik” vagy archiválják az aktuális naplófájlt és folytatják a naplózást egy új fájlban amikor bizonyos előre meghatározott körülmények bekövetkeznek, ezáltal megakadályozva a nem kívánt leállást.

Ebben a cikkben azt vizsgáljuk, hogyan konfigurálhatjuk a gördülő fájlmellékleteket a legszélesebb körben használt naplózási könyvtárakban - Log4j, Log4j2 és Slf4j.

Megmutatjuk, hogy miként gördítheti a naplófájlokat méret, dátum / idő, valamint a méret és a dátum / idő kombinációja alapján. Bemutatjuk azt is, hogyan kell konfigurálni az egyes könyvtárakat a régi naplófájlok automatikus tömörítésére és későbbi törlésére, ezzel megmentve minket az unalmas háztartási kódok írásától.

2. Mintaalkalmazásunk

Kezdjük egy példa alkalmazással, amely naplóz néhány üzenetet. Ez a kód a Log4j alapú, de könnyen módosítható a Log4j2 vagy az Slf4j használatához:

import org.apache.log4j.Logger; public class Log4jRollingExample {private static Logger logger = Logger.getLogger (Log4jRollingExample.class); public static void main (String [] args) dobja az InterruptedException {for (int i = 0; i <2000; i ++) {logger.info ("Ez az az idő, amikor azt mondom, hogy" Hello World ".") ; Szál.alszik (100); }}}

Az alkalmazás meglehetősen naiv - néhány üzenetet hurokba ír, rövid késéssel az iterációk között. 2000 ciklus futtatásával és 100 ms szünettel az egyes ciklusokban az alkalmazásnak valamivel több, mint három percet kell igénybe vennie.

Ezt a mintát arra használjuk, hogy bemutassuk a gördülő fájl-kiegészítők különféle típusainak több tulajdonságát.

3. A File Appenders gördülése a Log4j fájlban

3.1. Maven-függőségek

Először is, a Log4j használatához az alkalmazásban adja hozzá ezt a függőséget a projektéhez pom.xml fájl:

 log4j log4j 1.2.17 

Az által biztosított további függelékek használatához apache-log-extrák amelyet a következő példákban használunk, adja hozzá a következő függőséget, ügyelve arra, hogy a teljes kompatibilitás biztosítása érdekében ugyanazt a verziót használja, amelyet a Log4j esetében deklaráltunk:

 log4j apache-log4j-extrák 1.2.17 

A Log4j és az Apache Log4j Extras legújabb kiadását a Maven Centralon találja meg.

3.2. A fájlméret alapján gördül

A Log4j-ben, csakúgy, mint a többi naplókönyvtárban, a fájlok áthelyezése a függelékre van átruházva. Nézzük meg a Log4j fájlok méretének megfelelően gördülő állomány konfigurációját:

Itt úgy konfiguráltuk a Log4j-t, hogy a naplófájlt gördítse, amikor annak mérete eléri az 5KB-t, a MaxFileSize paraméter. Utasítottuk a Log4j-t, hogy legfeljebb két gördülő naplófájlt tartson meg a MaxBackupIndex paraméter.

A mintaalkalmazás futtatásakor a következő fájlokat kaptuk:

2016. 11. 27. 10:28 138 app.log 2016.11.27. 10:28 5.281 app.log.1 2016. 11. 27. 10:28 5.281 app.log.2 

Mi történt? Log4j elkezdett írni a app.log fájl. Amikor a fájlméret meghaladta az 5 KB-os korlátot, a Log4j áthelyezte app.log nak nek app.log.1, létrehozott egy teljesen új, üres app.log, és folytatta az új naplóüzenetek írását a app.log.

Aztán az új után app.log túllépte az 5KB határt, ezt a gördülési folyamatot megismételték. Ezúttal, app.log.1 ide költöztek app.log.2, helyet teremtve egy új, üresnek app.log.

A gördülési folyamatot a futás során többször megismételték, de mivel az alkalmazásunkat legfeljebb két tekercses fájl megőrzésére konfiguráltuk, nincs egyetlen fájl sem app.log.3.

Tehát megoldottuk az eredeti problémákat, mert képesek vagyunk korlátot beállítani az előállított naplófájlok méretére.

Másrészt, amikor megnéztük a app.log.2, a 700. iterációhoz kapcsolódó üzenetet tartalmazta, vagyis minden korábbi naplóüzenet elveszett:

2016-11-27 10:28:34 INFO Ez a 700 alkalom, amikor azt mondom, hogy „Hello World”. 

Nézzük meg, hogy tudunk-e előállítani egy olyan telepítést, amely jobban megfelel a termelési környezetnek, ahol a naplóüzenetek elvesztése nem tekinthető a legjobb megközelítésnek.

Ehhez más hatékonyabb, rugalmasabb és konfigurálhatóbb Log4j-függelékeket fogunk használni, amelyeket egy dedikált csomagban apache-log4j-extrák.

Az ebben a műtárgyban szereplő függelékek rengeteg lehetőséget kínálnak a rönkhengerlés finomhangolására, és bevezetik a kiváltó politika és gördülő politika. A kiváltó politika leírja, hogy mikor forduljon elő egy tekercs, míg a gördülő politika leírja, hogy a hengerlést hogyan kell végrehajtani. Ez a két fogalom kulcsfontosságú a naplófájlok gördítéséhez, és többé-kevésbé kifejezetten más könyvtárak is használják őket, amint hamarosan látni fogjuk.

3.3. Gurulás automatikus tömörítéssel

Térjünk vissza a Log4j példához, és javítsuk a beállításokat azáltal, hogy helyet takarítunk meg a hengerelt fájlok automatikus tömörítésével:

A ... val kiváltó politika elemnél kijelentettük, hogy a tekerésnek akkor kell bekövetkeznie, ha a napló meghaladja az 5.120 bájt méretet.

Belül gördülő politika címke, a ActiveFileName paraméter a legfrissebb üzeneteket tartalmazó fő naplófájlok útvonalát és a FileNamePattern A paraméter megad egy sablont, amely leírja, hogy melyik legyen a gördített fájlok elérési útja. Megjegyezzük, hogy ez valóban egy minta, mert a speciális helyőrző %én helyére kerül a gördített fájl indexe.

Ezt is jegyezzük meg FileNamePattern egy „.gz ” kiterjesztés. Amikor egy támogatott tömörített formátumhoz társított kiterjesztést használunk, akkor a régi hengerelt fájlokat minden további erőfeszítés nélkül tömörítjük.

Az alkalmazás futtatásakor egy másik naplófájlkészletet kapunk:

2016/12/12 19:24 88 app.1.log.gz ... 2016/12/12 19:26 88 app.2.log.gz 2016/12/12 19:26 88 app.3.log. gz 2016.12.03 19:27 70 app.current.log 

A fájl app.current.log itt történt az utolsó napló. A korábbi naplókat hengerelték és tömörítették, amikor méretük elérte a beállított határt.

3.4. Dátum és idő alapján gördülő

Más esetekben érdemes beállítani a Log4j konfigurálását a fájlok görgetésére a naplóüzenetek dátuma és ideje alapján, a fájl mérete helyett. Például egy webalkalmazásban érdemes lehet, ha az összes naplóüzenetet egy nap alatt adják ki ugyanabban a naplófájlban.

Ehhez használhatja a TimeBasedRollingPolicy. Ezzel a házirenddel kötelező megadni egy sablont a naplófájl elérési útjához, amely időhöz kapcsolódó helyőrzőt tartalmaz. Minden alkalommal, amikor naplóüzenetet adnak ki, a hozzáfűző ellenőrzi, hogy mi lenne az eredményül kapott naplóútvonal, és ha eltér az utoljára használt útvonaltól, akkor egy tekercs következik be. Itt van egy rövid példa, amely konfigurálja az ilyen alkalmazásokat:

3.5. Gurulás méret és idő alapján

A SizeBasedTriggeringPolicy és a TimeBasedRollingPolicy, beszerezhet egy hozzáfűzőt, amely a dátum / idő alapján gördül, és amikor a fájl mérete eléri a beállított határt, akkor a méret alapján is gördül:

Amikor ezzel a beállítással futtattuk az alkalmazásunkat, a következő naplófájlokat kaptuk:

2016. 12. 03. 19:25 234 kb. 19-25.1481393432120.log.gz 2016. 12. 03. 19:25 234 kb. 19-25.1481393438939.log.gz 2016. 12. 03. 19:26 244 kb. .log.gz 2016/12/12 19:26 240 kb. 19-26.1481393449152.log.gz 2016/12/12 19:26 3,528 kb.

A fájl kb. 19-26.1481393470902.log az a hely, ahol az aktuális naplózás történik. Amint láthatja, a 19:25 és 19:26 közötti időközönkénti összes naplót több tömörített naplófájlban tároljákkb. 19-25 ″. A "%én" helyőrzőt egyre nagyobb szám váltja fel.

4. A File Appenders gördülése a Log4j2-ben

4.1. Maven-függőségek

A Log4j2 preferált naplókönyvtáraként való használatához frissítenünk kell projektünk POM-ját a következő függőséggel:

 org.apache.logging.log4j log4j-core 2.7 

Szokás szerint a legújabb verziót a Maven Central oldalon találja.

4.2. A fájlméret alapján gördül

Változtassuk meg a példaalkalmazásunkat a Log4j2 naplókönyvtárak használatára, és vizsgáljuk meg, hogyan állíthatjuk be a fájlok gördülését a naplófájl mérete alapján log4j2.xml konfigurációs fájl:

  % d {éééé-hh-nn. ÓÓ: mm: ss}% p% m% n 

Ban,-ben Házirendek címkét, megadtuk az összes kiváltó házirendet, amelyet alkalmazni szeretnénk. OnStartupTriggeringPolicy az alkalmazás indításakor minden esetben elindít egy tekercset, ami hasznos lehet önálló alkalmazásoknál. Ezután megadtuk a SizeBasedTriggeringPolicy kijelentve, hogy egy tekercsnek akkor kell bekövetkeznie, amikor a naplófájl eléri az 5 KB-ot.

4.3. Dátum és idő alapján gördülő

A Log4j2 által kínált házirendek használatával állítsunk be egy hozzáfűzőt a naplófájl idő szerinti tekercseléséhez és tömörítéséhez:

  % d {éééé-hh-nn. ÓÓ: mm: ss}% p% m% n 

Itt a legfontosabb a használata TimeBasedTriggeringPolicy ez lehetővé teszi számunkra, hogy az időhöz kapcsolódó helyőrzőket használjuk a hengerelt fájlnevek sablonjában. Vegye figyelembe, hogy mivel csak egyetlen kiváltó házirendre volt szükségünk, nem kell használnunk a Házirendek tag, mint az előző példában tettük.

4.4. Gurulás méret és idő alapján

Ahogy korábban leírtuk, vonzóbb forgatókönyv a naplófájlok görgetése és tömörítése mind idő, mind méret alapján. Íme egy példa arra, hogyan állíthatjuk be a Log4j2-t ehhez a feladathoz:

  % d {éééé-hh-nn. ÓÓ: mm: ss}% p% m% n 

Ezzel a konfigurációval kijelentettük, hogy a tekercsnek az idő és a méret alapján kell történnie. Az alkalmazás hozzá tudja érteni, hogy milyen időintervallumra hivatkozunk a fájlnévhez használt minta miatt:kb.% d {HH-nn-éééé-ÓÓ-mm}.% i.log.gz ”, amely implicit módon beállítja, hogy minden percben előforduljon egy tekercs, és tömöríti a feltekert fájlt.

Hozzáadtuk a DefaultRolloverStrategy bizonyos feltételeknek megfelelő régi tekercselt fájlok törléséhez. Konfiguráljuk a saját fájlunk törlését, amelyek 20 napnál idősebbek az adott mintának megfelelő fájlokat.

4.5. Maven-függőségek

A Log4j2 preferált naplókönyvtáraként való használatához frissítenünk kell projektünk POM-ját a következő függőséggel:

 org.apache.logging.log4j log4j-core 2.7 

Szokás szerint a legújabb verziót a Maven Central oldalon találja.

5. A File Appenders gördülése az Slf4j fájlban

5.1. Maven-függőségek

Ha az Slf4j2-t egy Logback háttérprogrammal kívánja naplókönyvtáraként használni, adja hozzá ezt a függőséget a sajátjához pom.xml:

 ch.qos.logback logback-classic 1.1.7 

Szokás szerint a legújabb verziót a Maven Central oldalon találja.

5.2. A fájlméret alapján gördül

Most nézzük meg, hogyan kell helyette használni az Slf4j-t az alapértelmezett háttérrel Vissza. Fedezzük fel, hogyan állíthatjuk be a fájlok gördülését a konfigurációs fájlban logback.xml, amely az alkalmazás osztályútvonalán található:

 target / slf4j / roll-by-size / app.log target / slf4j / roll-by-size / app.% i.log.zip 1 3 1MB 5KB% -4relative [% thread]% -5level% logger {35} -% msg% n 

Ismét a gördülő politika fogalmával találkozunk. Az alapmechanizmus megegyezik a Log4j és a Log4j2 által használt mechanizmussal. A FixedWindowRollingPolicy lehetővé teszi számunkra, hogy egy index helyőrzőt használjunk a hengerelt fájl névmintájában.

Amikor a naplófájl mérete meghaladja a beállított korlátot, új fájl kerül kiosztásra, és a régi tartalom a lista első fájljaként kerül tárolásra, a meglévőket egy hellyel tovább tolva.

5.3. Idő alapján gördülő

Az Slf4j-ben egy naplófájlt görgethetünk az idő alapján, a megadottak használatával TimeBasedRollingPolicy. Ez a házirend lehetővé teszi a gördülő fájl sablonnevének megadását az idővel és dátummal kapcsolatos helyőrzők használatával:

 target / slf4j / roll-by-time / app.log target / slf4j / roll-by-time / app.% d {yyyy-MM-dd-HH-mm} .log.zip 20 1 MB% d {yyyy-MM -dd HH: mm: ss}% p% m% n 

5.4. Gurulás méret és idő alapján

Ha mind az idő, mind a méret alapján görgetnie kell egy fájlt, használhatja a mellékelt fájlt SizeAndTimeBasedRollingPolicy. A házirend használatakor meg kell adnia mind az időhöz kapcsolódó helyőrzőt, mind az index helyőrzőjét.

Minden alkalommal, amikor a naplófájl mérete egy bizonyos időintervallumon túlmutat a beállított méretkorláton, egy másik naplófájl jön létre, amelynek értéke megegyezik az időhöz kapcsolódó helyőrző értékével, de növelt indexű:

 target / slf4j / roll-by-time-and-size / app.log target / slf4j / roll-by-time-and-size / app.% d {yyyy-MM-dd-mm}.% i.log. cipzár 5KB 20 1MB% d {éééé-hh-nn. ÓÓ: mm: ss}% p% m% n 

6. Következtetés

Mint láttuk, a naplózási könyvtár kihasználása a fájlok tekercselésére megtakarít a naplófájlok kézi kezelésének terhe alól, lehetővé téve, hogy az üzleti logika fejlesztésére összpontosítson. A gördülő fájlmellékletek értékes eszköznek számítanak, amely minden fejlesztő eszköztárában szerepelnie kell.

Szokás szerint a forrásokat a GitHubon találja, ahol az ebben a cikkben bemutatott példaalkalmazások úgy vannak konfigurálva, hogy több különböző gördülő beállítással jelentkezzenek be annak érdekében, hogy jó alapkonfigurációt találjanak, amelyet az Ön igényeinek megfelelően tovább lehet módosítani.


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