Sprievodca rolovaním príloh súborov

1. Prehľad

Aj keď protokolové súbory často prenášajú užitočné informácie, časom sa prirodzene zväčšujú a ak sa umožní ich neobmedzený rast, ich veľkosť by mohla predstavovať problém.

Knižnice v protokole tento problém riešia pomocou valcovanie súborov, ktoré automaticky „rolujú“ alebo archivujú aktuálny súbor denníka a obnovia prihlásenie v novom súbore keď nastanú určité vopred definované podmienky, čím sa zabráni nežiaducim prestojom.

V tomto článku sa budeme venovať tomu, ako nakonfigurovať prídavné súbory súborov v niektorých z najbežnejšie používaných knižníc protokolovania - Log4j, Log4j2 a Slf4j.

Ukážeme si, ako ukladať súbory denníka na základe veľkosti, dátumu a času a kombinácie veľkosti a dátumu a času. Predvedieme tiež, ako nakonfigurovať každú knižnicu tak, aby automaticky komprimovala a neskôr vymazala staré súbory denníka, čo nám ušetrí potrebu písania nudného kódu domácnosti.

2. Naša vzorová aplikácia

Začnime príkladnou aplikáciou, ktorá zaznamenáva niektoré správy. Tento kód je založený na Log4j, ale je možné ho ľahko upraviť tak, aby fungoval s Log4j2 alebo Slf4j:

import org.apache.log4j.Logger; public class Log4jRollingExample {private static Logger logger = Logger.getLogger (Log4jRollingExample.class); public static void main (String [] args) hodí InterruptedException {for (int i = 0; i <2000; i ++) {logger.info ("Toto je" + i + "čas, kedy poviem 'Hello World'.") ; Závit. Spánok (100); }}}

Aplikácia je dosť naivná - niektoré správy píše v slučke s malým oneskorením medzi iteráciami. Ak má byť spustených 2 000 slučiek a v každej slučke je pauza 100 ms, dokončenie aplikácie by malo trvať niečo viac ako tri minúty.

Túto ukážku použijeme na demonštráciu niekoľkých funkcií rôznych druhov pripájacích súborov súborov.

3. Posúvanie príloh súborov v Log4j

3.1. Maven závislosti

Najskôr, aby ste vo svojej aplikácii mohli používať Log4j, pridajte túto závislosť do svojho projektu pom.xml spis:

 log4j log4j 1.2.17 

Ak chcete použiť ďalšie dodatky poskytnuté serverom apache-log-komparz ktoré použijeme v nasledujúcich príkladoch, pridajte nasledujúcu závislosť a nezabudnite použiť rovnakú verziu, ktorú sme deklarovali pre Log4j, aby sme zaistili úplnú kompatibilitu:

 log4j apache-log4j-extras 1.2.17 

Najnovšie vydanie aplikácií Log4j a Apache Log4j Extras nájdete na serveri Maven Central.

3.2. Rolovanie na základe veľkosti súboru

V Log4j, rovnako ako v iných knižniciach protokolovania, je valcovanie súborov delegované na prihlasovateľa. Pozrime sa na konfiguráciu dodávateľa pohyblivých súborov v aplikácii Log4j, ktorá sa pohybuje na základe veľkosti súboru:

Tu sme nakonfigurovali Log4j tak, aby používal súbor s protokolom, keď jeho veľkosť dosiahne 5 kB MaxFileSize parameter. Tiež sme dali Log4j pokyn, aby uchovával maximálne dva zvalené súbory denníka pomocou MaxBackupIndex parameter.

Keď sme spustili našu vzorovú aplikáciu, získali sme nasledujúce súbory:

27/11/2016 10:28 138 app.log 27/11/2016 10:28 5,281 app.log.1 27/11/2016 10:28 5,288 app.log.2 

Čo sa stalo? Log4j začal písať do app.log spis. Keď veľkosť súboru presiahla limit 5 kB, program Log4j sa presunul app.log do app.log.1, vytvoril úplne nový, prázdny app.loga pokračoval v písaní nových správ do protokolu app.log.

Potom po novom app.log prekročil limit 5 kB, tento postup sa opakoval. Tentokrát, app.log.1 bol presunutý do app.log.2, uvoľnenie miesta pre ďalšie nové, prázdne app.log.

Proces rolovania sa opakoval niekoľkokrát počas behu, ale keďže sme nakonfigurovali nášho pripájača tak, aby uchovával najviac dva rolované súbory, neexistuje žiadny súbor s názvom app.log.3.

Vyriešili sme teda jeden z pôvodných problémov, pretože sme teraz schopní nastaviť limit na veľkosť produkovaných súborov denníka.

Na druhej strane, keď sme skontrolovali prvý riadok z app.log.2, obsahovala správu súvisiacu so 700. iteráciou, čo znamená, že všetky predchádzajúce správy denníka boli stratené:

2016-11-27 10:28:34 INFO Toto je 700 krát, čo poviem „Hello World“. 

Pozrime sa, či môžeme prísť s nastavením, ktoré lepšie vyhovuje produkčnému prostrediu, kde stratu správ protokolu nemožno považovať za najlepší prístup.

K tomu použijeme ďalšie výkonnejšie, flexibilnejšie a konfigurovateľnejšie doplnky Log4j, ktoré sú dodávané v samostatnom balíku s názvom apache-log4j-extras.

Dodatky obsiahnuté v tomto artefakte ponúkajú veľa možností na jemné vyladenie postupnosti protokolov a zavádzajú odlišné koncepty spúšťacia politika a priebežná politika. The spúšťacia politika popisuje, kedy by malo dôjsť k rolovaniu, zatiaľ čo priebežná politika popisuje, ako by sa malo rolovanie vykonať. Tieto dva koncepty sú kľúčom k postupnému zápisu súborov a sú viac-menej explicitne používané aj v iných knižniciach, ako sa čoskoro presvedčíme.

3.3. Rolovanie s automatickou kompresiou

Vráťme sa k príkladu Log4j a vylepšme naše nastavenie pridaním automatickej kompresie zvinutých súborov, aby sme ušetrili miesto:

Vďaka spúšťacia politika prvku, uviedli sme, že k rolovaniu by malo dôjsť, keď denník prekročí veľkosť 5 120 bajtov.

V rámci priebežná politika značka, the ActiveFileName parameter udáva cestu k hlavným protokolovým súborom obsahujúcim najnovšie správy a FileNamePattern parameter určuje šablónu popisujúcu, ktorá by mala byť cestou rolovaných súborov. Upozorňujeme, že toto je skutočne vzor, ​​pretože špeciálny zástupný symbol % i bude nahradený indexom rolovaného súboru.

Poznamenajme to tiež FileNamePattern končí sa „.gz “ predĺženie. Kedykoľvek použijeme príponu spojenú s podporovaným komprimovaným formátom, budeme mať staré zvinuté súbory skomprimované bez akejkoľvek námahy z našej strany.

Teraz, keď spustíme aplikáciu, získame inú sadu súborov denníka:

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

Súbor app.current.log je miesto, kde sa vyskytli posledné protokoly. Predchádzajúce protokoly boli zrolované a skomprimované, keď ich veľkosť dosiahla stanovený limit.

3.4. Postupné na základe dátumu a času

V iných scenároch možno budete chcieť nakonfigurovať program Log4j tak, aby súbory prenášal na základe dátumu a času správ v protokole, a nie podľa veľkosti súboru. Napríklad vo webovej aplikácii môžete chcieť mať všetky správy denníka vydané v jeden deň v rovnakom súbore denníka.

Môžete to urobiť pomocou TimeBasedRollingPolicy. V rámci tejto politiky je povinné určiť šablónu pre cestu k súboru protokolu, ktorá obsahuje zástupný symbol súvisiaci s časom. Zakaždým, keď je vydaná správa protokolu, appender overí, aká bude výsledná cesta protokolu, a ak sa líši od naposledy použitej cesty, dôjde k rolovaniu. Tu je rýchly príklad, ktorý konfiguruje takéhoto prihlasovateľa:

3.5. Rolovanie založené na veľkosti a čase

Kombinácia SizeBasedTriggeringPolicy a TimeBasedRollingPolicy, môžete získať appendera, ktorý sa hodí podľa dátumu a času, a keď veľkosť súboru dosiahne nastavený limit, hodí sa aj podľa veľkosti:

Keď sme spustili našu aplikáciu s týmto nastavením, získali sme nasledujúce súbory denníka:

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

Súbor app.19-26.1481393470902.log je miesto, kde prebieha aktuálne protokolovanie. Ako vidíte, všetky protokoly v intervale od 19:25 do 19:26 sú uložené vo viacerých komprimovaných súboroch protokolov s názvami začínajúcimi na „app.19-25 ″. The „% I“ zástupný symbol je nahradený čoraz väčším počtom.

4. Posúvanie príloh súborov v Log4j2

4.1. Maven závislosti

Ak chcete ako preferovanú knižnicu na protokolovanie použiť Log4j2, musíme aktualizovať POM nášho projektu s nasledujúcou závislosťou:

 org.apache.logging.log4j log4j-core 2.7 

Ako obvykle nájdete najnovšiu verziu na serveri Maven Central.

4.2. Rolovanie na základe veľkosti súboru

Zmeňme našu ukážkovú aplikáciu tak, aby používala logovacie knižnice Log4j2, a poďme teraz preskúmať, ako môžeme nastaviť postupovanie súborov na základe veľkosti logovacieho súboru v log4j2.xml konfiguračný súbor:

  % d {rrrr-MM-dd HH: mm: ss}% p% m% n 

V Postupy značka, určili sme všetky spúšťacie pravidlá, ktoré chceme použiť. OnStartupTriggeringPolicy spúšťa úlohu pri každom spustení aplikácie, čo by mohlo byť užitočné pre samostatné aplikácie. Potom sme špecifikovali a SizeBasedTriggeringPolicy s tým, že k roll by malo dôjsť vždy, keď súbor denníka dosiahne 5 kB.

4.3. Postupné na základe dátumu a času

Pomocou politík ponúkaných programom Log4j2 nastavíme prihlasovateľa, ktorý bude komprimovať a komprimovať súbor denníka na základe času:

  % d {rrrr-MM-dd HH: mm: ss}% p% m% n 

Tu je kľúčové použitie TimeBasedTriggeringPolicy to nám umožňuje používať v šablóne rolovaných názvov súborov zástupné symboly spojené s časom. Upozorňujeme, že pretože sme potrebovali iba jednu spúšťaciu politiku, nemusíme používať Postupy ako v predchádzajúcom príklade.

4.4. Rolovanie založené na veľkosti a čase

Ako už bolo popísané vyššie, pútavejším scenárom je rolovanie a kompresia súborov denníka na základe času a veľkosti. Tu je príklad toho, ako môžeme nastaviť Log4j2 pre túto úlohu:

  % d {rrrr-MM-dd HH: mm: ss}% p% m% n 

Pri tejto konfigurácii sme uviedli, že k rolovaniu by malo dôjsť na základe času a veľkosti. Prikladateľ je schopný pochopiť, na aký časový interval máme na mysli vzorec použitý pre názov súboru, “aplikácia% d {MM-dd-rrrr-HH-mm}.% i.log.gz ”, ktorý implicitne nastavuje výskyt rolovania každú minútu a komprimuje rolovaný súbor.

Pridali sme aj a DefaultRolloverStrategy na odstránenie starých zvalených súborov vyhovujúcich určitým kritériám. Nakonfigurujeme naše, aby sme odstránili súbory, ktoré zodpovedajú danému vzoru, ak sú staršie ako 20 dní.

4.5. Maven závislosti

Ak chcete ako preferovanú protokolovú knižnicu používať Log4j2, musíme aktualizovať POM nášho projektu s nasledujúcou závislosťou:

 org.apache.logging.log4j log4j-core 2.7 

Ako obvykle nájdete najnovšiu verziu na serveri Maven Central.

5. Posúvanie príloh súborov v Slf4j

5.1. Maven závislosti

Ak chcete použiť Slf4j2 s back-endom Logback ako protokolovacie knižnice, pridajte túto závislosť do svojho pom.xml:

 ch.qos.logback logback-classic 1.1.7 

Ako obvykle nájdete najnovšiu verziu na serveri Maven Central.

5.2. Rolovanie na základe veľkosti súboru

Pozrime sa teraz, ako namiesto toho použiť Slf4j s jeho predvoleným back-endom Logback. Poďme preskúmať, ako môžeme nastaviť postupovanie súborov v konfiguračnom súbore logback.xml, ktorý je umiestnený v triede aplikácie:

 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} -% správa% n 

Opäť sa stretávame s konceptom nepretržitej politiky. Základný mechanizmus je rovnaký ako ten, ktorý používajú Log4j a Log4j2. The FixedWindowRollingPolicy umožňuje nám použiť zástupný symbol indexu vo vzore názvu rolovaného súboru.

Keď veľkosť súboru denníka rastie nad nakonfigurovaný limit, pridelí sa nový súbor a starý obsah sa uloží ako prvý súbor v zozname, čím sa existujúce posunú o jedno miesto ďalej.

5.3. Valcovanie založené na čase

V Slf4j môžeme pomocou poskytnutého súboru prehrať súbor protokolu na základe času TimeBasedRollingPolicy. Táto zásada nám umožňuje určiť názov šablóny postupného súboru pomocou zástupných znakov týkajúcich sa času a dátumu:

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

5.4. Rolovanie založené na veľkosti a čase

Ak potrebujete prehrať súbor na základe času aj veľkosti, môžete použiť uvedené SizeAndTimeBasedRollingPolicy. Pri použití tejto politiky musíte určiť zástupný symbol súvisiaci s časom i zástupný symbol indexu.

Zakaždým, keď veľkosť súboru denníka v určitom časovom intervale prekročí nakonfigurovaný limit veľkosti, vytvorí sa ďalší súbor denníka s rovnakou hodnotou pre zástupný symbol súvisiaci s časom, ale s prírastkovým indexom:

 target / slf4j / roll-by-time-and-size / app.log target / slf4j / roll-by-time-and-size / app.% d {rrrr-MM-dd-mm}.% i.log. zip 5 kB 20 1 MB% d {rrrr-MM-dd HH: mm: ss}% p% m% n 

6. Záver

Ako sme videli, využitie knižnice na protokolovanie na ukladanie súborov vás ušetrí od bremena ručného spravovania súborov denníka, čo vám umožní sústrediť sa na vývoj vašej obchodnej logiky. Priebežné prílohy súborov sú cenným nástrojom, ktorý by sa mal nachádzať v paneli nástrojov každého vývojára.

Ako obvykle nájdete zdroje na GitHub, kde sú ukážkové aplikácie predstavené v tomto článku nakonfigurované na protokolovanie pomocou niekoľkých rôznych postupných nastavení, aby ste mohli nájsť dobrú základnú konfiguráciu, ktorá bude ďalej vylepšená tak, aby vyhovovala vašim potrebám.


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