Java Servlets – logovanie pomocou Log4J 2.

25. srpna 2004

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.

LoggerNotConfig.java:

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ýsledky logovania

Výsledky logovania

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.

LoggerWithConfig.java:

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:

Výsledky logovania

Výsledky logovania

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:

Výsledky logovania 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.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *