2009-05-17 13 views
13

Utilizzo di Apache Commons Logging e SLF4J con log4j, ma desidero anche utilizzare log4j.properties in un luogo personalizzato come conf/log4.properties. Qui è il problema:Proprietà di Log4j in un luogo personalizzato

Se uso

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

allora la mia app è legato a log4j e sconfigge lo scopo di avere ACL e SLF4J.

Qual è il modo migliore per configurarlo senza che l'app sappia mai quale sia l'implementazione di registrazione?

risposta

24

Penso che la cosa più semplice da fare sia specificare la posizione del file usando la proprietà di sistema log4j.configuration. Adottando l'esempio nella Log4J manual:

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

credo che Log4J troverà un file chiamato "log4j.properties" in qualsiasi punto del percorso di classe, ma può essere allucinazioni. Vale la pena provare, tuttavia.

+9

In realtà, ho avuto lo stesso problema, come l'OP, ma la soluzione non ha funzionato per me. Ho dovuto specificare la posizione del file log4j.properties in un modulo di stile URL (-Dlog4j.configuration = file: ///my/conf/log4j.properties). – Haes

+1

Upvotes tutt'intorno. Ha funzionato per me con una sola barra diretta dopo il file: -Dlog4j.configuration = file:/C: /JBoss51/jboss-eap-5.1 /..../ log4j.properties su JBOSS 5.1 EAP su un computer Windows 7. – CodeClimber

+0

@kdgregory ... dove specificare il percorso del file, è negli argomenti VM nella configurazione RUN nel progetto eclipse O è un file di configurazione in tomcat? – MKod

3

Come si afferma, invocando PropertiesConfigurator, si sta vincolando l'applicazione a log4j. Tuttavia, l'estensione di questo legame è piuttosto limitata. Si potrebbe facilmente rimuovere la riga invocando PropertiesConfigurator e ricompilare il codice. Fatto ciò, supponendo che si stia utilizzando l'API SLF4J per la registrazione, è possibile ripubblicare log4j con un altro framework di registrazione, ad esempio logback-classic o j.u.l. semplicemente sostituendo i file jar. Pertanto, SLF4J continua a servire il suo scopo in larga misura. Non butterei fuori il bambino con l'acqua del bagno.

1

È possibile specificare la posizione del file di configurazione con l'argomento VM

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

Problemi correlati