Bootstrap listener for custom Log4J initialization in a web environment

Para aplicaciones web, Spring tiene un configurardor de log. Este se configura en el fichero web.xml. En el cual le dices:

  1. que fichero tiene la configuracion de log4j.
  2. Y cual es la clase de Spring que levanta la configuracion.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:web="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
	version="2.4">
	<!-- ... -->
	<context-param>
		<param-name>log4jConfigLocation</param-name>
		<param-value>classpath:log4j_pepito.xml</param-value>
	</context-param>

	<listener>
		<listener-class>org.springframework.web.util.Log4jConfigListener
		</listener-class>
	</listener>
	<!-- ... -->
</web-app>
Anuncios
Bootstrap listener for custom Log4J initialization in a web environment

Problemas con el log en tomcat


Depuracion de log4j en el propio log


Para depurar log4j en Tomcat puedes usar -Dlog4j.debug al ejecutar tomcat.
En mi caso lo he añadido dentro de la variable JAVA_OPTS que esta en el fichero catalina.sh. Que es quien me arranca Tomcat.
Tambien se puede incluir como parte de la variable CATALINA_OPTS


ERROR Attempted to append to closed appender named


Cuando te da el error:

log4j:ERROR Attempted to append to closed appender named [pepito]

Pueden ocurrir dos cosas:

  1. has repetido el nombre de ese appender dentro de la configuracion del log.
  2. log4j se inicia dos veces. Al arrancar la primera vez, lanza el appender y le agrega los distintos loggers. Pero cuando se arranca por segunda vez… Se borra y carga de nuevo. Si tienes dos ficheros, por el motivo que sea, solo se va a cargar el que lea en 2º lugar. Evita este comportamiento.
    En mi caso, yo tenia mi fichero log4j.xml y luego mi aplicacion estaba configurada para que spring levantase el log. Aqui esta mi dualidad.
Problemas con el log en tomcat