Tengo un archivo de compilación que como parte del proceso de compilación se basa en varias tareas. Estos elementos taskdef (por ejemplo, webdoclet y jasper2) usan log4j como registrador. Idealmente, me gustaría poder proporcionar un archivo de configuración de log4j diferente para cada uno, pero como mínimo, me gustaría poder especificar qué archivo de configuración de log4j se utiliza.¿Cómo puedo proporcionar un log4j.xml personalizado para diferentes tareas de hormiga?
Lo que solía hacer era poner en la parte delantera de la ruta de clase el directorio que contenía el archivo log4j.xml que quería que utilizara taskdef. Por ejemplo:
<target name="define.jasper2"> <path id="jspc.classpath"> <!-- Put this FIRST so Jasper will find the log4j.xml in the Build directory --> <pathelement location="Build"/> <fileset dir="${tomcat.libs}"> .... </fileset> <pathelement location="${log4j.jar}"/> .... </path> <taskdef name="jasper2" classname="org.apache.jasper.JspC" classpathref="jspc.classpath"/> </target>
He verificado que, de hecho, el directorio "Build" es en la parte delantera de la ruta de clases y que existe una log4j.xml en ese directorio. Sin embargo, cuando ejecuto ant en modo detallado con log4j en la depuración, veo que log4j está eligiendo el log4j.xml que está en el directorio de trabajo actual , que no es el que yo quiero. Parece que Log4j no está utilizando classpath para resolver el log4j.xml predeterminado.
Estoy usando log4j 1.2.8 (incrustado en un marco más grande, por lo que no puedo actualizarlo) y algunas de estas tareas parecen depender de commons-logging 1.0.3. El proceso de compilación usa Sun Java 5.
Si yo set ANT_OPTS=-Dlog4j.configuration=Build/log4j.xml
antes de ejecutar la hormiga, las taskdefs cargan correctamente el log4j.xml deseado.
Colocando el directorio "Build" al frente de la ruta de clase para las taskdefs utilizadas para trabajar. No sé qué cambió. ¿Cómo puedo restaurar el comportamiento donde puedo controlar, dentro de build.xml, qué archivo de configuración de log4j se usa para una tarea determinada? ¿Hay alguna otra manera que no sea establecer ANT_OPTS y que no sea reorganizar los archivos para mover el log4j.xml de la aplicación fuera del directorio de trabajo actual para que log4j encuentre el archivo log4j.xml correcto?
que realmente preferiría no tener que mover cualquier archivo alrededor. – Eddie