Ver Mensaje Individual
  #3 (permalink)  
Antiguo 21/11/2011, 11:14
Rapidiablo
 
Fecha de Ingreso: febrero-2008
Mensajes: 42
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: log4j - ruta dinamica para el log

hmm.. no se bien a lo que te refieres con "usar rutas relativas en el log4j.properties", podrias decirme como??

Bueno yo hice un par de cambios para lograr esto pero todavia no funciona a la perfeccion. Lo que hice primero fue crear un listener como el siguiente:

Código:
public class MyContextListener extends ContextLoaderListener {
	
	public void contextInitialized(ServletContextEvent event) {
        ServletContext context = event.getServletContext();
        System.setProperty("rootPath", context.getRealPath("/"));
	}

	public void contextDestroyed(ServletContextEvent event) {	
		
	}
}
En el listener lo que hago es definir un "system propertie" llamado "rootpath" en el cual guardo el servelet context que es el path del contenedor.. en este caso el path del contenedor de Tomcat.

Y en el archivo web.xml:
Código:
   <listener>
    <listener-class>com.tangoe.test.listeners.SynergyContextListener</listener-class> 
  </listener>
Hago la llamada del listener.

Y en el archivo log4j.properties:
log4j.appender.file.File=${rootPath}WEB-INF/logs/TestLogs.log

Bueno.. esto funciona de maravilla pero no en todos los casos. Es decir:

Tengo el cliente y un serviudor corriendo en Tomcat.
Cuando inicio tomcat con ambas aplicaciones, entonces el archivo no se genera.
Pero cuando re-ejecuto el cliente (en este caso es donde puse las modificaciones de arriba), entonces si se crea el archivo y funciona perfectamente.

Lo que sospecho que esta pasando es que el archivo log4j.properties lo lee antes de que yo ejecute el listener y por ende, antes de que cree ese system propertie. Por lo que cuando re-ejecuto el cliente, la propiedad del sistema permanece, entonces cdo arranca denuevo log4j.properties si se carga bien.

Alguna idea de como resolver esto???