La spécification de Log4j2 Fichier de Configuration en Utilisant l'Exécutable JAR

J'ai de la difficulté en précisant le Log4j2 fichier de configuration de l'emplacement lors de l'utilisation d'un fichier JAR exécutable. Il fonctionne très bien si je m'en sépare tous les Pots, mais quand j'essaie de les combiner en un seul fichier JAR exécutable, pour une raison quelconque, le log4j2.xml fichier n'est pas ramassés à partir de la ligne de commande.

J'ai essayé ces deux méthodes de spécification de l'emplacement:

java -Djava.libary.path=..\bin -cp ..\config -jar MyApplication.jar

java -Djava.libary.path=..\bin -Dlog4j.configurationFile=..\config\log4j2.xml -jar MyApplication.jar

Ni de ceux qui travaillent. J'ai aussi essayé d'ajouter le répertoire contenant le fichier de configuration dans le classpath dans le BOCAL du fichier manifeste:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.2
Created-By: 1.7.0_21-b11 (Oracle Corporation)
Main-Class: com.abc.MyApplication
Class-Path: ../config/

Je n'ai pas eu du succès avec cette méthode. Les idées de ce que je fais de mal?

Merci d'avance pour toute aide!


MODIFIER

Ah, je crois que j'ai confondu le problème. À l'origine, c'était l'erreur, j'ai vu dans la ligne de commande de sortie:

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

Mais à un certain point, alors que j'étais en train de changer les choses, le message d'erreur a changé sans que je m'en rende compte:

ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...

Donc ce que j'ai compris c'est que même si l'exécutable JAR j'étais bâtiment a été notamment le log4j-core-2.1.jar et log4j-api-2.1.jar Pots à l'intérieur et à l' MANIFEST du fichier classpath, il y avait un problème. La façon dont j'ai écrit mon ant fichier de combiner les bibliothèques dans le seul BOCAL j'ai été la création a été réussi à copier les répertoires et les fichiers de classe, mais n'était pas de copier sur les autres types, pour certaines raisons, qui sont bien évidemment nécessaires (par exemple, Log4j-config.xsd, Log4j-événements.dtd, etc.).

Pour résoudre ce problème, j'ai changé la façon dont j'ai été la fusion des Pots dans mon fichier Ant:

<jar destfile="${dist}/${jarName}" basedir="${classes}" 
    excludes=".svn">

    <!-- Merge this JAR with all the JARs in the lib directory, so that
    we are only creating one distribution JAR that includes all the
    libraries that you need. -->
    <fileset dir="${classes}" includes="**/*.class" />
    <zipgroupfileset dir="${lib}" includes="**/*.jar" />

    <!-- Specify the manifest file of the JAR -->
    <manifest>
        <attribute name="Main-Class" value="com.abc.MyApplication"/>
        <attribute name="Class-Path" value=". ${manifest.classpath}"/>
    </manifest>
</jar>

Et qui a résolu le problème et copié tous les fichiers dans les Bocaux dans mes nouvellement créé JAR.

Une fois ce problème a été résolu, le deuxième des commandes que j'ai posté ci-dessus a travaillé pour spécifier l'emplacement du fichier de configuration. (Comme indiqué par @rewolf ci-dessous, la première commande ne fonctionne pas parce que le chemin spécifié dans le MANIFEST du POT remplace toute classpath spécifié sur la ligne de commande.

Merci pour vos réponses, elles m'a vraiment aidé à obtenir sur la bonne voie de trouver mes erreurs.

Si votre fichier de config n'est pas à l'intérieur de l'application jar?
Non, j'ai pensé qu'il était préférable de garder le fichier de configuration à l'extérieur du POT, de sorte que l'utilisateur peut modifier les configurations s'ils le souhaitent. Dois-je inclure le fichier dans le POT?
Comment voulez-vous créer votre seul bocal? Le log4j2-core pot contient des fichiers de configuration qui DOIT être inclus ou log4j2 ne fonctionnera pas correctement.
S'il vous plaît ajouter la sortie que vous recevez de log4j. J'ai été en supposant que c'est le statut par défaut de l'enregistreur de se plaindre d'aucun fichier de config - mais il pourrait avoir été une erreur de supposer donc

OriginalL'auteur Steph | 2015-02-18