configurazione log4j tramite argomenti JVM?


133

Quali variabili devo impostare / passare come argomenti alla JVM per far funzionare correttamente log4j? E intendo proprio non lamentarmi e stampare sulla console. Posso vedere un esempio tipico?

Nota: devo evitare di creare un file log4j.properties nell'applicazione.


2
Lettore attenzione: importante notare che la domanda è su log4j, non log4j2.
neves,

Risposte:


161

Hai un file di configurazione log4j? Basta fare riferimento usando

-Dlog4j.configuration={path to file}

dove {path to file} dovrebbe essere preceduto da file:

Modifica: se lavori con log4j2, devi usarlo

-Dlog4j.configurationFile={path to file}

Tratto da una risposta https://stackoverflow.com/a/34001970/552525


Brian - non esattamente quello che stavo cercando, ma penso che sia un discreto compromesso tra lo spostamento di un file nella mia applicazione e l'impostazione delle proprietà tramite arg JVM.
jconlin,

Penso che man mano che la tua applicazione diventa più complessa (se lo farà), il file diventa più gestibile man mano che lo configuri di più. Tuttavia, confesso di indovinare il tuo caso d'uso qui.
Brian Agnew,

25
{path to file}deve essere anteposto file:affinché funzioni.
OR Mapper,

2
@ORMapper - Ho modificato in modo appropriato
Brian Agnew,

6
Fai attenzione se usi Log4j 2 come nome della proprietà e sintassi cambiati. Vedere questa risposta .
José Andias,

161

La soluzione utilizza il seguente argomento JVM:

-Dlog4j.configuration={path to file}

Se il file NON è nel percorso di classe (nel WEB-INF/classescaso di Tomcat) ma da qualche parte sul tuo disco, usa file:, come

-Dlog4j.configuration=file:C:\Users\me\log4j.xml

Maggiori informazioni ed esempi qui: http://logging.apache.org/log4j/1.2/manual.html


2
Per il logback:-Dlogback.configurationFile=C:\logback-test.xml
30

2
+1 per menzionare il file (reiterando ciò che Tim ha detto. Questo mi ha fatto impazzire con log4j diverse volte.
Javavba

13
Un altro argomento JVM molto utile per il debug della configurazione di log4j:-Dlog4j.debug
KC

2
È possibile utilizzare il percorso relativo con questo metodo?
AaA,

33

Questo sembra essere cambiato (probabilmente con log4j2) in:

-Dlog4j.configurationFile=file:C:\Users\me\log4j.xml

Vedi: https://logging.apache.org/log4j/2.x/manual/configuration.html


Questo mi dà la seguente eccezione. C: \ Development \ Eclipses \ EclipseMars \ file: C: \ Users \ ABC \ log4j2.xml Come posso rendere assoluto il percorso
Cybermonk,

Per i Docker Container, ho usato JAVA_PARAMS="-Dlog4j.configurationFile=classpath:log4j2-container.xml"se l'immagine Docker supporta l'override di JAVA_PARAMS con env vars e il file si trova all'interno del Jar.
Marcello de Sales,

21

So che questa è già una risposta, ma poiché hai detto, questo non è esattamente quello che stai cercando, vorrei sottolineare la seguente alternativa:

È inoltre possibile utilizzare una classe di configurazione anziché le proprietà o il file xml.

-Dlog4j.configuratorClass=com.foo.BarConfigurator

Vedi http://logging.apache.org/log4j/1.2/manual.html per i dettagli.


1
Questa è la soluzione corretta se qualcuno vuole evitare di creare un file di configurazione. All'interno della tua classe Configurator personalizzata puoi chiamare BasicConfigurator () o creare i tuoi Logger e Appendici come preferisci. Preferirei di gran lunga un file di configurazione!
skiphoppy,

11

Generalmente, fintanto che il file log4j.properties si trova sul percorso di classe, Log4j dovrebbe semplicemente selezionarlo automaticamente all'avvio di JVM.


1
Questo è vero: la configurazione -Dlog4j.configuration è necessaria solo se il file non era nel percorso di classe o se si desidera utilizzare un file che non è il primo trovato nel percorso di classe
javadba

8

In ritardo alla festa dal 2015, Log4J 1.x ha raggiunto EOL .

Log4J 2.x in poi l' opzione JVM dovrebbe essere-Dlog4j.configurationFile=<filename>


PS <filename>potrebbe essere un file relativo al percorso della classe senza quello file:come suggerito nelle altre risposte.


2
Risposta importante, poiché le altre risposte non sono più valide.
Yossale,

1

Anche il percorso relativo è ok:

java -Dlog4j.configuration=file:".\log4j.properties" -jar com.your-1.0-SNAPSHOT.jar

o

java -Dlog4j.configuration=file:".\log4j.xml" -jar com.your-1.0-SNAPSHOT.jar

0

Se stai usando Gradle. Puoi applicare il plugin 'aplication' e usare il seguente comando

  applicationDefaultJvmArgs = [
             "-Dlog4j.configurationFile=your.xml",
                              ]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.