2016-03-21 1 views
0

J'ai eu beaucoup de mal à faire fonctionner ce système. La documentation Log4j2 demande de définir une propriété système log4j.configurationFile pour définir un chemin de configuration personnalisé. J'ai défini cette propriété dans mon pom.xmlLog4j2 La propriété système configurationFile ne fonctionne que pendant les tests maven

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.18.1</version> 
    <configuration> 
     <excludes> 
      <exclude>**/RequestMetricsTest.java</exclude> 
      <exclude>**/SessionMetricsTest.java</exclude> 
     </excludes> 
     <systemProperties> 
      <property> 
       <name>log4j.configurationFile</name> 
       <value>src/main/resources/metrics-log4j2.xml</value> 
      </property> 
     </systemProperties> 
    </configuration> 
</plugin> 

cela fonctionne parfaitement lorsque je lance mvn install qui exécute les cas de test et les journaux dans le fichier I défini dans la configuration. Cependant, quand je remplace ce jar construit dans mon application Web, il ne parvient pas à se connecter et continue à jeter l'erreur sur la configuration de log4j2 xml introuvable.

Question: Y a-t-il d'autres éléments dont j'ai besoin pour définir cette propriété système? REMARQUE: je n'ai pas web.xml dans mon projet.

+0

? dans le plugin Maven surefire? Pourriez-vous s'il vous plaît partager plus de votre fichier POM? –

+0

oui il est défini dans surefire maven plugin. Mettez à jour la question S'il te plaît, regarde. –

+0

que c'est normal qui ne s'applique qu'à la phase de test. Y a-t-il une raison pour laquelle cela doit être appelé metrics-log4j2.xml et non log4j2.xml? –

Répondre

1

Vous spécifiez la propriété du système dans le cadre du plug-in Maven Surefire, qui applique uniquement aux tests effectués, c'est pourquoi la configuration n'a pas été visible pour votre application finale.

Cependant, le fichier de configuration est placé sous /src/main/resources, par conséquent, il sera toujours livré (empaqueté) avec l'artefact du projet. Mais il n'a pas de nom standard (par défaut) et en tant que tel, log4j2 a besoin d'un autre paramètre pour le pointer.

De l'official F.A.Q. page

Par défaut, Log4j recherche un fichier de configuration nommé log4j2.xml (non log4j.xml) dans le classpath.
ous pouvez également spécifier le chemin complet du fichier de configuration avec cette propriété du système:
-Dlog4j.configurationFile=path/to/log4j2.xml

Si vous voulez appliquer à votre application Web, selon official documentation, vous devez ajouter à vous suivant web.xml fichier

<context-param> 
    <param-name>log4jConfiguration</param-name> 
    <param-value>/metrics-log4j2.xml</param-value> 
</context-param> 

Mais puisque vous avez mentionné que vous ne disposez pas d'un fichier web.xml dans votre projet (comment venir?), vous pouvez simplement le renommer à son nom par défaut (metrics-log4j2.xml-log4j2.xml) et devrait être reconnu automatiquement. Où vous définissez la section systemProperties ci-dessus?

+0

Merci pour l'explication détaillée. En fait, la partie du projet sur laquelle je travaille n'exige pas web.xml. Bien sûr, il existe un fichier web.xml pour l'ensemble du projet. Avec votre explication, je comprends que j'ai besoin de faire des changements dans ce web.xml. Merci encore! –

1

Le plug-in Surefire n'est utilisé que pendant la phase de test du cycle de vie de la construction. Les propriétés système définies ici sont uniquement destinées à l'injection lors de la génération Maven plutôt que lors de l'exécution de l'application. Une fois que vous compilez et exécutez votre fichier JAR, les propriétés système de l'hôte ou celles que vous transmettez en tant que paramètres sont utilisées.

Dites que vous exécutez votre JAR comme:

java -jar myjar.jar 

Vous pouvez définir la propriété log4j:

java -Dlog4j.configurationFile=src/main/resources/metrics-log4j2.xml -jar myjar.jar 

Sur une note latérale:

systemProperties est dépréciée.

Pouvez-vous s'il vous plaît essayer avec systemPropertyVariables à la place.

Documentation disponible ici: https://maven.apache.org/components/surefire/maven-surefire-plugin/examples/system-properties.html

+0

D'accord, je vais faire ce changement et essayer. Mais quelques questions, Pourquoi ça marche pour les tests maven si c'est déprécié? et, en ajoutant cela dans 'pom.xml' est suffisant pour faire fonctionner le journal? Désolé pour ces questions noob. Je fais ça pour la première fois. –

+0

il ne fonctionnera pas de toute façon, il continuera à être appliqué uniquement à la phase de test –

+0

Réponse mise à jour avec les informations requises. Désolé, j'ai frappé enregistrer trop tôt! – timothyclifford