Logback è una soluzione praticabile per affrontare questo problema. Dopo aver esaminato diversi hack per farlo funzionare con log4j, abbiamo deciso di passare a Logback. Ho usato la seguente configurazione con il logback jar all'interno della webapp.
file di
A Logback all'interno della webapp che includono un file esterno:
<?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}
è sostituito durante la filtrazione Maven dal percorso esatto, esterno alla webapp del file di configurazione (qualcosa come /opt/server /conf/loback.included.conf).
E poi, il contenuto del logback.included.conf
(questo file fa parte della projetct, consegnato con build-helper:attach-artifact
, così ${project.artifactId}
è anche sostituito durante la filtrazione 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>
unica limitazione, il contenuto della dotazione il file deve essere conforme a quello del comprender. Basta scrivere regole di fatto.
"Tuttavia, sia come app1-ejb.jar che app2-ebj.jar devono utilizzare log4j, il file log4j.jar può essere posizionato solo al livello più alto." Non puoi semplicemente includere un log4j.jar in ciascuno dei file WAR? – CodeClimber