System.out.println vs Loggery

1. Prečo drevorubači?

Počas písania programu alebo vývoja podnikovej produkčnej aplikácie pomocou System.out.println sa javí ako najjednoduchšia a najjednoduchšia možnosť. Do triedy classpath nie je možné pridať žiadne ďalšie knižnice a nie je potrebné vykonať ďalšie konfigurácie.

Ale pomocou System.out.println má niekoľko nevýhod, ktoré ovplyvňujú jeho použiteľnosť v mnohých situáciách. V tomto výučbe si povieme niečo o tom prečo a kedy by sme chceli použiť Logger cez obyčajný starý System.out a System.err. Ukážeme tiež niekoľko rýchlych príkladov pomocou protokolového rámca Log4J2.

2. Inštalácia

Predtým, ako začneme, sa pozrime na požadované Maven závislosti a konfigurácie.

2.1. Maven závislosti

Začnime pridaním závislosti Log4J2 do našej pom.xml:

 org.apache.logging.log4j log4j-api 2.12.1 org.apache.logging.log4j log4j-core 2.12.1 

Nájdeme najnovšie verzie servera log4j-api a log4j-jadro na Maven Central.

2.2. Konfigurácia Log4J2

Použitie System.out nevyžaduje žiadnu ďalšiu konfiguráciu. Aby sme však mohli používať Log4J2, potrebujeme a log4j.xml konfiguračný súbor:

Takmer všetky rámce protokolovacích nástrojov budú vyžadovať určitú úroveň konfigurácie, a to buď programovo, alebo prostredníctvom externého konfiguračného súboru, ako je napríklad tu zobrazený súbor XML.

3. Oddelenie výstupu protokolu

3.1. System.out a System.err

Keď nasadíme našu aplikáciu na server ako Tomcat, server použije vlastný záznamník. Ak použijeme System.out, protokoly skončia v catalina.out. Je oveľa jednoduchšie ladiť našu aplikáciu, ak sa protokoly ukladajú do samostatných súborov. S programom Log4j2 musíme do konfigurácie zahrnúť doplnok súboru, aby sme protokoly aplikácií uložili do samostatného súboru.

Tiež s System.out.println, neexistuje žiadna kontrola ani filtrovanie, ktoré protokoly sa majú tlačiť. Jediným možným spôsobom, ako oddeliť protokoly, je použitie System.out.println pre informačné denníky a System.err.println pre chybové protokoly:

System.out.println ("Toto je informačná správa"); System.err.println ("Toto je chybové hlásenie");

3.2. Úrovne protokolovania Log4J2

V ladiacich alebo vývojových prostrediach chceme vidieť všetky informácie, ktoré aplikácia tlačí. V živej podnikovej aplikácii však viac protokolov znamená zvýšenie latencie. Kostry protokolov ako Log4J2 poskytujú viac ovládacích prvkov na úrovni protokolu:

  • FATÁLNE
  • CHYBA
  • POZOR
  • INFO
  • DEBUG
  • TRACE
  • VŠETKY

Pomocou týchto úrovní môžeme ľahko filtrovať, kedy a kde ktoré informácie vytlačiť:

logger.trace ("Správa protokolu trasovania"); logger.debug ("Debug log message"); logger.info ("Informačná správa protokolu"); logger.error ("Chybová správa z protokolu"); logger.warn ("Varovať správu protokolu"); logger.fatal ("Závažná správa protokolu");

Môžeme tiež nakonfigurovať úrovne pre každý balík zdrojového kódu jednotlivo. Ďalšie informácie o konfigurácii na úrovni protokolu nájdete v našom článku Protokolovanie jazyka Java.

4. Zápis protokolov do súborov

4.1. Presmerovanie System.out a System.err

Je možné trasu System.out.println do súboru pomocou System.setOut () metóda:

PrintStream outStream = nový PrintStream (nový súbor ("outFile.txt")); System.setOut (outStream); System.out.println ("Toto je článok o baeldungu");

A v prípade System.err:

PrintStream errStream = nový PrintStream (nový súbor ("errFile.txt")); System.setErr (errStream); System.err.println ("Toto je chyba článku baeldung");

Pri presmerovaní výstupu do súboru pomocou System.out alebo System.err, nemôžeme kontrolovať veľkosť súboru, čím sa súbor po celú dobu chodu aplikácie neustále zväčšuje.

S rastúcou veľkosťou súboru môže byť ťažké otvoriť alebo analyzovať tieto väčšie protokoly.

4.2. Prihlásenie do súborov pomocou protokolu Log4J2

Protokol Log4J2 poskytuje mechanizmus na systematické zapisovanie protokolov do súborov a tiež ich ukladanie na základe určitých zásad. Napríklad môžeme nakonfigurujte súbory, ktoré sa majú presunúť na základe vzoru dátumu a času:

Alebo môžeme hádzať súbory podľa veľkosti, akonáhle dosiahnu stanovenú hranicu:

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

5. Prihlásenie do externých systémov

Ako sme videli v predchádzajúcej časti, rámce protokolovacích nástrojov umožňujú zapisovanie protokolov do súboru. Obdobne tiež poskytujú appenders to send logs to other systems and applications. Vďaka tomu je možné posielať protokoly do Kafka Stream alebo do databázy Elasticsearch skôr pomocou doplnkov Log4J, ako pomocou System.out.println.

Viac podrobností o tom, ako používať tieto prídavné zariadenia, nájdete v našom článku s prílohami Log4j.

6. Prispôsobenie výstupu protokolu

Pomocou záznamníkov môžeme prispôsobiť, aké informácie sa majú tlačiť spolu so skutočnou správou. Informácie, ktoré môžeme vytlačiť, zahŕňajú názov balíka, úroveň protokolu, číslo riadku, časová pečiatka, názov metódy atď.

Aj keď by to bolo možné s System.out.println, vyžadovalo by to veľa ručnej práce, zatiaľ čo protokolovacie rámce poskytujú túto funkčnosť po vybalení z krabice. S drevorubačmi, môžeme jednoducho definovať vzor v konfigurácii záznamníka:

Ak vezmeme do úvahy Log4J2 pre náš rámec protokolovania, existuje niekoľko vzorov, z ktorých si môžeme vybrať alebo prispôsobiť. Ak sa chcete o nich dozvedieť viac, prečítajte si oficiálnu dokumentáciu Log4J2.

7. Záver

Tento článok vysvetľuje rôzne dôvody, prečo používať rámec protokolovacieho zariadenia a prečo sa nespoliehať len na System.out.println pre naše denníky aplikácií. Aj keď je ospravedlniteľné použiť System.out.println pre malé testovacie programy by sme ho radšej nepoužívali ako hlavný zdroj protokolovania pre podnikovú produkčnú aplikáciu.

Príklady kódov v článku sú ako vždy dostupné na GitHub.


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