7
votes

journalisation log4j2 se produisent sur le mauvais chemin

J'ai une oreille déployée dans weblogic avec le logpath log4j2.xml défini sous xxx pré>

et un enregistreur défini comme p> xxx pré>

intérieur Cette oreille / LIB existe un pot contenant un log4j2.xml et la propriété LogPath est définie comme p> xxx pré>

et un enregistreur avec une structure d'emballage très similaire p> Xxx pré>

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


2 commentaires

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 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.


4 Réponses :


2
votes

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.


0 commentaires

-1
votes

Êtes-vous sûr de vouloir utiliser le fichier "log4.xml" à utiliser par log4j 2 . Je ne pense pas, Mécanisme de configuration automatique log4J2 tente de trouver le fichier de configuration avec le nom "logj.xml".

de Documentation officielle ,

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.

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.

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.

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.


2 commentaires

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.



2
votes

Comme vous savez probablement déjà votre problème, c'est que Un seul fichier de configuration est chargé et lequel dépend du chargeur de classe. Donc, vous ne devriez pas compter sur cela.

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

  1. 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.

  2. 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 .

    J'espère que ce petit conseil vous aidera. Bonne chance!


0 commentaires

2
votes

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 .

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.


0 commentaires