2009-05-17 10 views
13

Ich benutze Apache Commons Logging und SLF4J mit log4j, aber ich möchte auch die log4j.properties in einem benutzerdefinierten Ort wie conf/log4.properties verwenden. Hier ist das Problem:Log4j Eigenschaften in einem benutzerdefinierten Ort

Wenn ich

verwenden
PropertyConfigurator.configure("conf/log4j.properties"); 

dann meine App zu log4j gebunden ist und den Zweck der ACL und SLF4J hat.

Was ist der beste Weg, um es zu konfigurieren, ohne dass die App jemals weiß, was die Protokollimplementierung ist?

Antwort

24

Ich denke, die einfachste Sache zu tun ist, geben Sie den Speicherort der Datei mit der log4j.configuration Systemeigenschaft. Die Annahme des Beispiels im Log4J manual:

java -Dlog4j.configuration=conf/log4j.properties -classpath ... 

Ich glaube, dass Log4J eine Datei mit dem Namen „log4j.properties“ überall auf dem Classpath finden, kann aber halluziniert werden. Einen Versuch wert, jedoch.

+9

Eigentlich habe ich das gleiche Problem wie die OP hatte, aber Ihre Lösung nicht für mich arbeiten. Ich musste den Speicherort der Datei log4j.properties in einem URL-Format angeben (-Dlog4j.configuration = file: ///my/conf/log4j.properties). – Haes

+1

Upvotes rundum. Arbeitete für mich mit nur einem Schrägstrich nach der Datei: -Dlog4j.configuration = Datei:/C: /JBoss51/jboss-eap-5.1 /..../ log4j.properties auf JBOSS 5.1 EAP auf einem Windows 7-Rechner. – CodeClimber

+0

@kdgregory ... wo geben wir den Speicherort der Datei an, ist es in VM-Argumente in RUN-Konfiguration in Eclipse-Projekt ODER ist es eine Konfigurationsdatei in Tomcat? – MKod

3

Wie Sie sagen, indem Sie PropertiesConfigurator aufrufen, binden Sie Ihre Anwendung an log4j. Der Umfang dieser Krawatte ist jedoch ziemlich begrenzt. Sie können die Zeile, die PropertiesConfigurator aufruft, sehr einfach entfernen und Ihren Code neu kompilieren. Wenn Sie dann die SLF4J-API für die Protokollierung verwenden, können Sie log4j mit einem anderen Protokollierungsframework, z. B. logback-classic oder j.u.l, repalieren. nur durch den Austausch von JAR-Dateien. Somit erfüllt SLF4J immer noch weitgehend seinen Zweck. Ich würde das Kind nicht mit dem Bade ausschütten.

1

können Sie geben Konfigurationsdatei Lage mit VM Argument

-Dlog4j.configuration="file:/C:/workspace3/local/log4j.properties"