Logback ist eine praktikable Lösung, um dieses Problem zu lösen. Nachdem wir uns verschiedene Hacks angeschaut haben, um dies mit log4j arbeiten zu lassen, haben wir uns entschieden, zu Logback zu wechseln. Ich habe die folgende Konfiguration mit Logback-Jar in der Webapp verwendet.
A Logback Datei im webapp, die eine externe Datei umfassen:
<?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}
während Maven Filterung durch den genauen Pfad, außerhalb des webapp der Konfigurationsdatei (so etwas wie /opt/Server ersetzt wird, /conf/loback.included.conf).
Und dann wird der Inhalt der logback.included.conf
(diese Datei ist Teil der projetct, mit build-helper:attach-artifact
geliefert, so wird ${project.artifactId}
auch bei Maven-Filterung ersetzt):
<?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>
Nur Einschränkung der Inhalt des mitgelieferten Datei muss mit der des Includers übereinstimmen. Einfach Regeln schreiben.
"Da sowohl app1-ejb.jar als auch app2-ebj.jar log4j verwenden müssen, kann log4j.jar nur auf der obersten Ebene platziert werden." Können Sie nicht einfach eine log4j.jar in jede WAR-Datei einfügen? – CodeClimber