Java Servlets - logovanie pomocou Log4J
Pri práci a hlavne pri odlaďovaní servletov vývojár aplikácie veľmi často potrebuje zaznamenávať rôzne typy informácií. Logovanie môžete využiť nie len na ukladanie debugovacích informácií počas vývoja aplikácie, ale tiež na
ukladanie informácií v ostrej prevádzke, vrátane rôznych varovaní a popisu chýb. Logovanie umožňuje posielať správy a zobrazovať ich rôznymi spôsobmi či už pre programátora alebo administrátora, pričom logované správy môžu byť doručené na konzolu, alebo uložené do súboru či databázy.
Za týmto účelom bol vytvorený veľmi výkonný open source nástroj
Log4J, samozrejme v spojení so servletmi.
Základná koncepcia Log4J
Log4J obsahuje tri hlavné prvky:
Ak chcete môžete si tieto prvky preložiť do vám vyhovujúceho jazykového tvaru. Ku každému prvku si povieme niečo bližšie. Log4J využíva systém externých konfiguračných súborov určených na konfigurovanie týchto troch prvkov. Sú to prevažne textové súbory obsahujúce dvojice parameter/hodnota.
Logger
Logger je entita, ktorú servlet využíva na logovanie správ. Aby sme ju mohli použiť, je nutné naimportovať triedy Log4J, vytvoriť jej inštanciu (konkrétne
org.apache.log4j.Logger), a potom zavolať príslušnú metódu. Názvy logovacích metód sú odvodené od tzv. logovacích úrovní. Napríklad ak chceme zalogovať nejakú informatívnu správu, zavoláme nasledovnú metódu:
logger.info("HttpServlet init method called.");
Log4J má
päť rôznych logovacích úrovní (prípadne kategórií):
- DEBUG
- má primárne na starosti logovanie informácií v procese vývoja a odlaďovania aplikácie.
- INFO
- je určené na monitoring stavu a priebehu aplikácie.
- WARN
- označuje a monitoruje potenciálne nebezpečné situácie.
- ERROR
- reprezentuje chybové stavy, z ktorých je možné sa zotaviť
- FATAL
- ako posledná úroveň sú fatálne chyby spôsobujúce ukončenie aplikácie
Uvedené kategórie sú zoradené vzostupne. Inými slovami existuje tu hierarchia. Napríklad logger prislúchajúci k úrovni WARN, môže logovať iba informácie na tejto a vyšších úrovniach (ERROR a FATAL), ale nemôže logovať správy na úrovni DEBUG a INFO, pretože sa v hierarchii nachádzajú pod kategóriou WARN.
Každý logger je konfigurovaný na príslušnú úroveň v Log4J konfiguračnom súbore, pričom správy ktoré sa logujú sú logicky prepojené s príslušným loggerom. Napríklad si predstavte, že nastavíme logger na úroveň DEBUG a vytvoríme servlet, ktorý bude obsahovať nejeké množstvo volaní metódy
logger.debug(Object message). Tieto volania budú využité pri debugovaní. Neskôr zmeníme úroveň nášho loggera na úroveň INFO. Výsledok bude, že debugovacie správy sa už nebudú zaznamenávať do logovacej repository (konzola, súbor, databáza). Je to preto, pretože úroveň DEBUG nie je rovná alebo vyššia ako úroveň INFO v danej hierarchii.
Appender
Log4J umožňuje logovať správy rôznymi spôsobmi. Môžete logovať štandardne na konzolu (užitočné najmä pri vývoji aplikácie), môžete logovať do súboru, do databázy, môžete poslať správu na email server. Log4J označuje tieto jednotlivé logovacie mechanizmy ako
appender. Ich popis sa umiestňuje do konfiguračného súboru (prevažne je to
log4j.properties).
Layout
Layout špecifikuje jednak výsledný vzhľad ako bude výsledný log vyzerať a tiež aj aký rozsah informácií bude obsahovať. Na výber máte množstvo rôznych layoutov, ktoré môžete priradiť v konfiguračnom súbore log4j.properties. Môžete špecifikovať veľmi jednoduchý ale aj veľmi komplexný layout prostredníctvom tzv. konverzných šablón, ktoré sa veľmi podobajú na regulárne výrazy.
Napríklad ak nám stačí základný layout, použijeme triedu
org.apache.log4j.SimpleLayout. Použitím tohto formátu bude log obsahovať názov logovacej kategórie, pomlčku a samotnú správu. Napríklad: " INFO -
HttpServlet? init method called ".
--
MatusTaraba - 22 May 2007