Logování J2EE aplikací v Tomcatu 6.0

Vývojáři v development verzi Tomcatu (6.0) změnili způsob logování. Dříve se používal toolkit commons-logging (který ve verzi 5.5 nahrazoval vlastní Tomcat logger). Nyní je všechno úplně jinak – Tomcat 6 používá vlastní implementaci JULI založenou na java.util.logging API (vlastní handlery, které umějí rotovat soubory). Bohužel to není zdokumentované na stránkách projektu ani na Wiki, jedinou zmínku jsem našel v knize Professional Apache Tomcat 6, kterou jsme ve firmě naštěstí měli k dispozici.

Důvodem opuštění Commons Logging knihovny byla nedostatečná flexibilita – tato fasáda nenabízí všechny vlastnosti knihoven log4j nebo java.util.logging jako je například Nested Diagnostic Contexts. Autoři výše zmíněné knihy také uvádějí horší možnosti konfigurace, matení uživatelů a také mírné snížení výkonu při použití fasády. Proto vývojáři Tomcatu zvolili Java Logging knihovnu, ovšem nic není růžové. Tato API se konfiguruje pouze v rámci JRE, ale pro účely Tomcatu bylo nutné mít oddělené prostory (jeden pro každý kontejner), a proto byla vytvořena implementace JULI, která je java.util.logging-kompatibilní (můj učitel češtiny by se v hrobě obracel).

Logování J2EE aplikace

Ačkoli autoři knihy Professional Tomcat 6 vybízejí k používání knihovny log4j, která se v Tomcatu vůbec nevyskytuje (takže nehrozí žádné nekompatibility verzí), já používám ve svvých aplikacích java.util.logging. Konkrétněji u Tomcatu 6 tedy SLF4J fasádu s použitím SLF4J-JDK14 (slf4j-api.jar + slf4j-jdk14.jar). Pomocí této kombinace docílím toho, že jdou logovací zprávy přes java.util.logging do JULI a logovacích souborů Tomcatu. Za předpokladu, že naše aplikace loguje přes jména balíčků com.pike.název_projektu můžeme nastavit logování v conf/logging.properties takto:

Řádek

handlers = 1catalina.org.apache.juli.FileHandler, ..., java.util.logging.ConsoleHandler

změníme na

handlers = 1catalina.org.apache.juli.FileHandler, ..., java.util.logging.ConsoleHandler, 99pike.org.apache.juli.FileHandler

a přidáme nové nastavení

99pike.org.apache.juli.FileHandler.level = FINEST
99pike.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
99pike.org.apache.juli.FileHandler.prefix = pike.
com.pike.level = FINEST
com.pike.handlers = 99pike.org.apache.juli.FileHandler

Samozřejmě můžeme úrovně nastavovat dle libosti (pomocí volby .level). Tomcat bude logy ukládat do adresáře logs/pike.2008-07-23.log (každý den nový soubor).

Ve chvíli, když budeme nasazovat na jiný J2EE kontejner, budeme postupovat podobně. Zvolíme správnou fasádu (log4j, jdk14 a podobně) a nastavíme webový kontejner (nastavení může být různé od dodavatele k dodavateli).

Výhodou použití logovacího subsystému J2EE serveru jsou zřejmé – konfiguraci lze upravovat pomocí standarních nástrojů serveru. V drtivé většině můžete provádět změny nastavení logování za běhu pomocí JMX protokolu.

Logování přístupu

Pro logování přístupu (access log) stačí odkomentovat příslušný „valve“ záznam v conf/server.xml.

Diskuze

If you can't read the letters on the image, download this .wav file to get them read to you.
pridej.cz
blog/logovani_j2ee_aplikaci_v_tomcatu_6.0.txt · Poslední úprava: 23.07.2008 16:15 autor: lzap
Creative Commons License Valid CSS Driven by DokuWiki Recent changes RSS feed Valid XHTML 1.0