Tomcat 6.0.20 con log4J
Contents
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
- Apache Tomcat 6.0 Logging in Tomcat
- Apache Tomcat 6.0 Additional Components
- Short introduction to log4j
--Daniel Simao 09:25 8 abr 2010 (UTC)