Tomcat 6.0.20 con log4J

From Luniwiki
Jump to: navigation, search

Logging de Tomcat

Tomcat por defecto utiliza JULI para efectuar el log. Para tener una mejor administración de los logs, se suele preferir Log4J.

Libreria de Log4J

El jar de Log4J tiene que copiarse en en la carpeta lib del contenedor. La versión de Log4J tiene que ser superior a 1.2.

cp ~/log4j-1.2.13.jar $CATALINA_HOME/lib

Componentes extras

Desde la página de descarga de tomcat en la carpeta bin/extra encontramos los jars modificados de JULI, donde la elección del sistema de logueo no esta implementado "hardcoded". Descargamos los ficheros tomcat-juli.jar y tomcat-juli-adapters.jar. Antes de remplazar se realizara una copia de seguridad.

mv $CATALINA_HOME/bin/tomcat-juli.jar $CATALINA_HOME/bin/tomcat-juli.jar.bak
cp ~/tomcat-juli.jar $CATALINA_HOME/bin
cp ~/tomcat-juli-adapters.jar $CATALINA_HOME/lib

Ficheros de configuración

Se renombre el fichero de propiedades de JULI, para que no cree ficheros vacios.

mv $CATALINA_HOME/conf/logging.properties $CATALINA_HOME/conf/logging.properties.bak

Se crea el fichero de configuración de log4J log4j.properties en la carpeta $CATALINA_HOME/lib

log4j.rootLogger=INFO, R 
log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.File=${catalina.base}/logs/tomcat.log 
log4j.appender.R.MaxFileSize=10MB 
log4j.appender.R.MaxBackupIndex=10 
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

Configuración aplicaciones

Una vez configurado el Log4J del contenedor, tenemos que configurar el de las aplicaciones. Hay 2 metodos para configurar cada aplicación. Mediante codigo, indicar el fichero de configuración, o mediante variable de entorno.

Por variable de entorno

La variable de entorno a configurar es CATALINA_OPTS, en las versiones anteriores a Tomacat 4, el nombre de la variable es TOMCAT_OPTS. En alguna referencia de /bin/startup.sh, añadimos las siguientes líneas.

CATALINA_OPTS="-Dlog4j.configuration=log4j.properties " $CATALINA_OPTS
export CATALINA_OPTS

Cada aplicación (en realidad VM) buscara el fichero log4j.properties en su entorno. Lo buscará en la carpeta WEB-INF/classes de la aplicación.

Por codigo

Mediante codigo se puede especificar el fichero de configuración, y llamar al metodo configure de la clase PropertyConfigurator de Log4J.

PropertyConfigurator.configure(fichero);

Por maquina virtual solo se necesita llamar una vez. En el caso de tomcat una buena opción es crear un servlet con arranque al inicio que nos configure el Log4J.

package com.foo;
import org.apache.log4j.PropertyConfigurator;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.io.IOException;
public class Log4jInit extends HttpServlet {
 public
 void init() {
   String prefix =  getServletContext().getRealPath("/");
   String file = getInitParameter("log4j-init-file");
   // if the log4j-init-file is not set, then no point in trying
   if(file != null) {
     PropertyConfigurator.configure(prefix+file);
   }
 }
 public
 void doGet(HttpServletRequest req, HttpServletResponse res) {
 }
}

En el web.xml

<servlet>
   <servlet-name>log4j-init</servlet-name>
   <servlet-class>com.foo.Log4jInit</servlet-class>
   <init-param>
     <param-name>log4j-init-file</param-name>
     <param-value>WEB-INF/classes/log4j.properties</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup>
 </servlet>

Referencias

--Daniel Simao 09:25 8 abr 2010 (UTC)