Java Servlets – logovanie pomocou Log4J 2.
V predchádzajúcom článku sme načali problematiku logovania informácií prostredníctvom servletov. Povedali sme si niečo o logovacom nástroji Log4J a ako ho môžeme využiť. Uviedli sme si niekoľko základných krokov a zadefinovali sme základnú koncepciu logovania. V tomto článku budeme pokračovať a ukážeme si, ako najjednoduchšie využiť Log4J bez nutnosti vytvárania konfiguračného súboru a ako priradiť appender.
Naším cieľom teda je vytvoriť a použiť logger bez nutnosti vytvárania vlastného konfiguračného súboru. Riešenie je veľmi jednoduché. Stačí vhodne využiť triedu org.apache.log4j.BasicConfigurator
. Aby sme si to názorne ilustrovali, vytvoríme si servlet, ktorý vytvorí logger v metóde init()
, a tá sa vykoná pri vytváraní inštancie samotného servleta. Ďalej využijeme statickú metódu configure()
, ktorá pre náš logger vytvorí ConsoleAppender
. Inými slovami logger bude zaznamenávať informácie na konzolu, v ktorej beží server, pričom použije prednastavený formát.
import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.PrintWriter;
public class LoggerNotConfig extends HttpServlet {
private Logger log = null;
public void init(){
//použijeme root logger
log = Logger.getRootLogger();
//logovanie pôjde na konzolu
BasicConfigurator.configure();
}
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, java.io.IOException {
//úroveň DEBUG
log.debug(„Posielam DEBUG message …“);
//úroveň INFO
log.info(„Posielam INFO message …“);
//zobrazíme aj nejaké HTML
response.setContentType(„text/html“);
PrintWriter out = response.getWriter();
out.println(„<html><head></head><body>“);
out.println(„<h2>Logger without config file!</h2>“);
out.println(
„Logger name is: “ + log.getName()+“<br>“);
out.println(„</body></html>“);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
java.io.IOException {
doGet(request,response);
}
}
Ešte raz opakujem, že daný servlet posiela logovacie informácie na konzolu v základnom formáte, a to bez potreby vytvárania konfiguračného súboru. Znamená to teda, že ak potrebujeme narýchlo zaznamenať nejaké informácie, môžeme tak urobiť pomerne jednoducho. Výsledky uvedeného príkladu si môžete pozrieť v nasledovných obrázkoch.
V skutočnej praxi však určite budete potrebovať viac možností, ako a kde zaznamenávať logovacie informácie. Preto si v druhej časti ukážeme, ako priradiť k aplikácii appender. Využijeme pritom konfiguračný súbor. Pre jednoduchosť to bude appender vypisujúci správy na konzolu. Keďže už v minulom článku sme si pri základných krokoch uviedli, ako konfiguračný súbor vytvoriť, tentoraz ho už len jednoducho uvediem.
# definícia super loggera s názvom cons
log4j.rootLogger = DEBUG, cons
# definícia „konzolového“ appendera pre logger cons
log4j.appender.cons = org.apache.log4j.ConsoleAppender
# definícia použitého layoutu pre logger cons
log4j.appender.cons.layout = org.apache.log4j.SimpleLayout
Šiesty riadok súboru log4j.properties určuje, že logger použije jednoduchý formát, ktorý vypíše logovaciu úroveň (DEBUG), pomlčku a samotnú správu. Nasledujúci príklad ukazuje servlet, ktorý tento logger využíva. Log4J nájde súbor log4j.properties automaticky v adresári WEB-INF/classes. Je to dané tým, že servlet nenakonfiguruje logger dodatočne volaním statickej metódy BasicConfigurator.configure()
, tak ako v predošlom príklade.
import org.apache.log4j.Logger;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.PrintWriter;
public class LoggerWithConfig extends HttpServlet {
private Logger log = null;
public void init(){
/* root logger získa potrebné informácie z
WEB-INF/classes/log4j.properties */
log = Logger.getRootLogger();
log.info(„LoggerWithConfig started …“);
}
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, java.io.IOException {
log.debug(„Posielam DEBUG message …“);
log.info(„Posielam INFO message …“);
response.setContentType(„text/html“);
PrintWriter out = response.getWriter();
out.println(„<html><head></head><body>“);
out.println(„<h2>Logger with config file!</h2>“);
out.println(
„Logger name is: “ + log.getName()+“<br>“);
out.println(„</body></html>“);
}
}
Celé logovanie prebehlo presne podľa obsahu konfiguračného súboru. Bol použitý jednoduchý formát s výstupom na konzolu. A tu je výsledok nášho snaženia:
Okrem layoutu SimpleLayout existujú ešte ďalšie. Konkrétne DateLayout, HTMLLayout, PatternLayout a XMLLayout. Je na vás, ako ich využijete, experimentom sa medze nekladú. Niektoré z nich, napríklad HTMLLayout alebo XMLLayout má zmysel použiť vtedy, ak je výstup smerovaný do súboru. Napríklad takto vyzerá výstup s použitím HTMLLayoutu:
Na záver vám ponúkam príklady na stiahnutie.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
inPage AI: Jak na generování obsahu
18. července 2024 -
Členská sekce: 4 důvody proč ji mít na svém webu
12. března 2024 -
Moderní trendy ve webdesignu: Top trendy pro rok 2024
12. ledna 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024