J'ai une oreille déployée dans weblogic avec le logpath log4j2.xml défini sous et un enregistreur défini comme p> intérieur Cette oreille / LIB existe un pot contenant un log4j2.xml et la propriété LogPath est définie comme p> et un enregistreur avec une structure d'emballage très similaire p> Les deux log4j2.xml sont configurés pour avoir un nom de fichier journal différent également.
Mais les journaux pour les deux arrivent dans le chemin quelque chose_path_2 et avec le nom de fichier défini dans ce bocal p> Comment s'assurer que les deux sorties de journalisation se produisent séparément comme défini? P> Ma structure de l'oreille est comme P> ear
|--lib
|--|--abc.jar
|--|--|--log4j2.xml //the one thats getting loaded
|--|--xyz.jar
|--|--|--log4j2.xml //the one I want.. works but not always.Does classloader loads the jars alphabetically?
|--xyz.war
|--|--WEB-INF
|--|--|--classes
|--|--|--|--log4j2.xml // the one I want
4 Réponses :
log4j est initialisé une seule fois à l'aide du fichier de configuration qui est d'abord trouvé par le log4j BootsTrapper. Tous les autres fichiers de configuration (présents possibles) ne seront pas pris en compte. En savoir plus sur les précédents de la configuration automatique de Log4J dans les tutoriels appropriés. P>
Êtes-vous sûr de vouloir utiliser le fichier "log4.xml" à utiliser par log4j de Documentation officielle , P>
log4j a la possibilité de vous configurer automatiquement pendant
initialisation. Quand log4j commence, il localisera tous les
Plugins configuratifs et les organiser dans l'ordre pondéré de
le plus élevé au plus bas. Comme livré, log4J contient quatre
Configuration des implémentations: une pour JSON, une pour YAML, une
Pour les propriétés et une pour XML. P>
log4J inspectera la propriété système "log4j.configurationFILE" et,
Si défini, tentera de charger la configuration à l'aide de la
ConfigurationFactory qui correspond à l'extension de fichier. p>
blockQuote>
Si aucune propriété système n'est définie, les propriétés ConfigurationFactory rechercheront les fichiers log4j2.properties ou log4j2.json ou log4j2.xml dans CLASSPATH. P>
Peut-être que vous devriez essayer de renommer le fichier "xyz.war // web-inf / classes / log4j.xml" à "xyz.war // web-inf / classes / log4j2.xml". De toute évidence, le contenu de ce fichier doit confirmer à Log4j Configuration XSD. P>
La question mentionne clairement dans la première ligne elle-même l'utilisation de log4j2.xml plutôt que log4j.xml.
La réponse a été faite sur la base de la structure de l'oreille donnée dans la question initiale. Vous avez fait des modifications pour corriger le nom de fichier dans la structure de l'oreille. Quoi qu'il en soit, je modifierai la réponse à votre question.
Comme vous savez probablement déjà votre problème, c'est que Il n'y a que deux sentiments possibles pour votre problème, mais aujourd'hui, je n'ai pas le temps de le faire pour vous - désolé. Vous devez supprimer ou renommer le fichier de configuration dans abc.jar p>
Supprimer log4j2.xml de abc.jar
Faites-le avec votre script de construction en fourmi / maven / gradle ou autre chose. Copiez-coller les parties de l'interessation du fichier de configuration dans votre fichier de configuration. P> li>
renommer log4j2.xml à l'intérieur abc.jar
Faites-le avec votre script de construction en fourmi / maven / gradle ou autre chose. Maintenant, vous pouvez inclure tout le fichier de configuration dans votre log4j2.xml. Ceci s'appelle compositeconfiguration . p> li>
ol>
J'espère que ce petit conseil vous aidera.
Bonne chance! P>
Pouvez-vous supprimer les XMLS du JAR / Guerre et n'utilisez qu'un seul fichier XML au niveau de l'oreille qui contient des détails sur les chemins de journalisation / les propriétés. Vous pouvez essayer de Reconfigure log4j2 dans le code avec un fichier de configuration spécifique . p>
Vous pouvez aussi écrire de manière dynamique sur des fichiers journaux distincts , mais Personnellement, je n'ai pas essayé cela, donc je ne pourrais pas guider plus sur cela. P>
Je pense que vous laissez le module Log4J2 à rechercher le fichier de configuration log4j2 dans la classe de classe. Donc, basé sur le bocal, le répertoire est chargé d'abord le fichier de configuration est chargé. Potentiellement, vous pouvez faire
-dlog4j.configurationFile = chemin / à / log4j2.xml code> comme argument. Si cela n'est pas possible, laissez programmatiquement Log4J à trouver dans un chemin spécifique.
"Comment s'assurer que les deux sorties de journalisation se produisent séparément au sens?" Il n'y a pas de support pour plusieurs fichiers de configuration. Vous devriez fusionner manuellement les configurations alors vous auriez besoin de spécifier le log4j2.xml à utiliser avec l'établissement comme @WeWrews suggéré ou que vous devez vous assurer qu'il n'y a qu'un seul log4j2.xml dans la classe de classe.