Logback es una solución viable para hacer frente a este problema. Después de buscar alrededor de diferentes hacks para que esto funcione con log4j, hemos decidido cambiar a Logback. He utilizado la siguiente configuración con Logback jar dentro de la aplicación web.
archivo
Un Logback dentro de la aplicación web que incluyen un archivo externo:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="10 seconds">
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<contextName>${project.artifactId}</contextName>
<jmxConfigurator />
<include file="${logback.configuration.filepath}" />
</configuration>
${logback.configuration.filepath}
se sustituye durante el filtrado Maven por la ruta exacta, externo a la aplicación de web del archivo de configuración (algo así como /opt/servidor /conf/loback.included.conf).
Y luego, el contenido de la logback.included.conf
(este archivo es parte de la projetct, entregado con build-helper:attach-artifact
, por lo ${project.artifactId}
también se sustituye durante el filtrado Maven):
<?xml version="1.0" encoding="UTF-8" ?>
<included>
<appender name="file" class="ch.qos.logback.core.FileAppender">
<file>/var/log/server/${project.artifactId}.log</file>
<encoder>
<pattern>[@/%contextName] %date{ISO8601} [%-5level] %thread:[%logger] %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="file" />
</root>
</included>
única limitación, el contenido de los incluidos el archivo debe ser compatible con el del includer. Solo estoy escribiendo reglas de hecho.
"Pero como app1-ejb.jar y app2-ebj.jar también necesitan usar log4j, log4j.jar solo se puede colocar en el nivel superior." ¿No puedes simplemente incluir un log4j.jar en cada uno de los archivos WAR? – CodeClimber