Wie konfigurieren Sie mehrere log4j für die verschiedene Kriege in einer einzigen OHR?
Habe ich ein OHR mit Strukturen wie:
APP.ear
- APP1.war
- WEB-INF/classes/log4j.properties
- APP2.war
- WEB-INF/classes/log4j.properties
- app1-ejb.jar
- app2-ejb.jar
- log4j.jar
- spring.jar
- commons-lang.jar (...and other jar)
Ich will, daß jeder KRIEG eine eigene Anwendungs-log. Aber es scheint die obige Konfiguration nicht funktioniert. Melden Sie sich für APP1 und APP2 geht APP1 geschrieben. Ist es irgendwie schaffen separate app anmeldet?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es stellt sich heraus, dass es unmöglich ist, durch den classloader. Der classloader-Hierarchie ist wie:
Application-classloader -> Ejb classloader -> Krieg classloader
Haben eine sepearte log für einzelne Krieg, kann man log4j.jar im inneren Krieg und lassen Sie die log4j verwendet, die den Krieg classloader. Aber da beide app1-ejb.jar und app2-ebj.jar auch müssen mit log4j, die log4j.jar kann nur gelegt werden, auf der obersten Ebene. Also die log4j ist auf application-classloader Ebene.
Kann ich das angeben einer einzelnen log4j config zu melden anderes Paket zu verschiedenen Dateien. Aber für die gemeinsame Bibliothek wie der Frühling, das Protokoll nicht sepearted.
Der Grund, warum es nicht funktioniert, weil die log4j vorhanden ist, in den root Ordner, stattdessen lassen Sie jeden Krieg zu haben Log4j.jar in seiner WEB-INF/lib-Verzeichnis und entfernen Sie die log4j.jar von der Wurzel.
Weitere Infos zu diesem finden Sie meine blog-Artikel auf dieser
http://techcrawler.wordpress.com/
Können Sie auch tun, indem Sie dynamisch ändern die DATEI-Eigenschaft im Eigenschaften-Datei mit der PropertyConfigurator im code.
Logback ist eine praktikable Lösung, um dieses problem zu beheben. Nachdem Sie schauen Sie sich um verschiedene hacks um diese Arbeit mit log4j, haben wir uns entschieden zu wechseln Logback. Ich habe die folgende Konfiguration mit Logback jar innerhalb der webapp.
Einen Logback-Datei in die webapp, die Sie einschließen einer externen Datei:
${logback.configuration.filepath}
ersetzt wird, während Maven filtern, indem Sie den genauen Pfad, die sich außerhalb der webapp der Konfigurations-Datei (so etwas wie /opt/server/conf/loback.enthalten.conf).Und dann den Inhalt der
logback.included.conf
(diese Datei ist Teil des projetct, geliefert mitbuild-helper:attach-artifact
, so${project.artifactId}
wird ebenfalls ersetzt, während Maven filtering):Einzige Einschränkung, der Inhalt der include-Datei muss kompatibel sein mit dem des includer. Nur Regeln schreiben, in der Tat.