configuration de log4j via le (s) argument (s) JVM?


133

Quelles variables dois-je définir / transmettre comme arguments à la machine virtuelle Java pour que log4j fonctionne correctement? Et par correctement, je veux dire ne pas se plaindre et imprimer sur la console. Puis-je voir un exemple typique?

Remarque: je dois éviter de créer un fichier log4j.properties dans l'application.


2
Attention aux lecteurs: il est important de noter que la question concerne log4j, pas log4j2.
neves

Réponses:


161

Avez-vous un fichier de configuration log4j? Référencez-le simplement en utilisant

-Dlog4j.configuration={path to file}

où {chemin d'accès au fichier} doit être préfixé par file:

Edit: Si vous travaillez avec log4j2, vous devez utiliser

-Dlog4j.configurationFile={path to file}

Tiré de la réponse https://stackoverflow.com/a/34001970/552525


Brian - pas exactement ce que je recherchais, mais je pense que c'est un bon compromis entre déplacer un fichier dans mon application et définir les propriétés via des arguments JVM.
jconlin

Je pense qu'au fur et à mesure que votre application devient plus complexe (si c'est le cas), le fichier devient plus gérable à mesure que vous le configurez davantage. Cependant, j'avoue que je devine votre cas d'utilisation ici.
Brian Agnew

25
{path to file}doit être précédé de file:pour que cela fonctionne.
OR Mapper

2
@ORMapper - J'ai modifié de manière appropriée
Brian Agnew

6
Faites attention si vous utilisez Log4j 2 lorsque le nom de la propriété et la syntaxe ont changé. Voyez cette réponse .
José Andias

161

La solution utilise l'argument JVM suivant:

-Dlog4j.configuration={path to file}

Si le fichier n'est PAS dans le classpath (dans le WEB-INF/classescas de Tomcat) mais quelque part sur votre disque, utilisez file:, comme

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

Plus d'informations et d'exemples ici: http://logging.apache.org/log4j/1.2/manual.html


2
Pour Logback:-Dlogback.configurationFile=C:\logback-test.xml
30thh

2
+1 pour avoir mentionné le fichier (réitérant ce que Tim a dit. Cela m'a rendu fou avec log4j à plusieurs reprises.
javadba

13
Un autre argument JVM très pratique pour déboguer la configuration de log4j:-Dlog4j.debug
KC

2
Est-il possible d'utiliser un chemin relatif avec cette méthode?
AaA

33

Cela semble avoir changé (probablement avec log4j2) en:

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

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


Cela me donne l'exception suivante. C: \ Development \ Eclipses \ EclipseMars \ file: C: \ Users \ ABC \ log4j2.xml Comment rendre le chemin absolu
Cybermonk

Pour les conteneurs Docker, j'ai utilisé JAVA_PARAMS="-Dlog4j.configurationFile=classpath:log4j2-container.xml"si l'image Docker prend en charge le remplacement de JAVA_PARAMS avec des variables d'environnement et que le fichier est à l'intérieur du Jar.
Marcello de Sales

21

Je sais que cela a déjà été répondu, mais comme vous l'avez dit, ce n'est pas exactement ce que vous recherchez, je voudrais souligner l'alternative suivante:

Vous pouvez également utiliser une classe de configuration au lieu des propriétés ou du fichier xml.

-Dlog4j.configuratorClass=com.foo.BarConfigurator

Voir http://logging.apache.org/log4j/1.2/manual.html pour plus de détails.


1
C'est la bonne solution si quelqu'un veut éviter de créer un fichier de configuration. Dans votre propre classe Configurator personnalisée, vous pouvez appeler BasicConfigurator (), ou créer vos propres enregistreurs et appenders comme vous le souhaitez. Mais je préférerais de loin un fichier de configuration!
skiphoppy

11

En règle générale, tant que votre fichier log4j.properties est sur le chemin de classe, Log4j devrait simplement le récupérer automatiquement au démarrage de la JVM.


1
C'est vrai: la configuration -Dlog4j.configuration n'est nécessaire que si le fichier n'était pas dans le chemin de classe ou si vous souhaitez utiliser un fichier qui n'est pas le premier trouvé dans le
chemin de classe

8

En retard à la fête comme depuis 2015, Log4J 1.x a atteint EOL .

Log4J 2.x et les versions ultérieures, l' option JVM doit être-Dlog4j.configurationFile=<filename>


PS <filename>pourrait être un fichier relatif au chemin de classe sans le file:comme suggéré dans les autres réponses.


2
Réponse importante, car les autres réponses ne sont plus valables.
Yossale

1

Le chemin relatif est également correct:

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

ou

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

0

Si vous utilisez gradle. Vous pouvez appliquer le plugin 'aplication' et utiliser la commande suivante

  applicationDefaultJvmArgs = [
             "-Dlog4j.configurationFile=your.xml",
                              ]
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.