log4j plusieurs fichiers de configuration
J'ai quelques projets intégrés dans une application web comme des pots. Chaque projet a un log4j.fichier de propriétés. Lorsque l'application web est deloyed, qui fichier de configuration est utilisé et comment remplacer les configurations dans log4j.xml dans un fichier jar. Les pots ne sont pas des projets web. Ils sont plus comme de la couche de service code. Qu'est-ce que l'ordre dans lequel les log4j.les propriétés de fichier est chargé dans le scénario
Web-project
classes
log4j.properties
ProjectB.jar
com
log4j.properties
ProjectC.jar
com
log4j.properties and so on.
OriginalL'auteur user373201 | 2011-11-07
Vous devez vous connecter pour publier un commentaire.
Si vos pots sont des applications web distinctes, chaque application web doit utiliser celui qu'il trouve d'abord dans le classpath (WEB-INF/classes).
Vous pouvez passer une -Dlog4j.configuration=chemin_vers_fichier paramètre, par exemple le démarrage de tomcat pour s'assurer qu'il utilise celui que vous avez l'intention de l'utiliser.
Cependant, ce serait alors à ma connaissance que tomcat va utiliser pour chaque webapp qui est déployé.
Question ici est de savoir comment vous déployez vos applications. Toutes les applications web en un seul tomcat dans ce cas, vous voudrez probablement chaque application web pour utiliser un autre log4.propriétés (ou log4j.xml) ou, dans le cas où vous spécifiez un de tomcat, il doit utiliser celle que vous spécifiez.
Ce qui se résume pour autant que je sais: le premier trouvé sur le chemin de classe (rappelez-vous: chaque application web a son propre chemin de classe) ou celle spécifiée par l'option-D de réglage.
Viens de trouver cette référence qui, je pense, bien résume les principaux concepts de l'exploitation forestière dans webapps de tomcat et déployé dans tomcat: http://wiki.apache.org/tomcat/FAQ/Logging
Si vous avez besoin d'encore plus de contrôle sur la journalisation log4j, vous pouvez recourir au codage de la configuration log4j en java. Cependant, cela ne signifie pas que vous avez à modifier le code source et ajouter du code en ce qui a trait à l'infrastructure et concerne les détails de déploiement de votre application (pas très agréable).
ok, compris. Est-ce un problème pour votre scénario? Voyez-vous un besoin de redéfinir le log4j.les propriétés qui sont contenus dans les pots? Pouvez-vous influencer la façon dont les applications sont développés et intégrés?
dans l'exemple présenté ci-dessus. Je ne pense pas que log4j.propriétés de ProjectA.jar ou ProjectB.jar aura ramassé. Au lieu de dupliquer le contenu de Log4j.propriétés ProjectA.jar le principal, log4j.propriétés, je me demandais si il existe un moyen de charger tous les 3 fichiers de propriété sans la dupliquer.
Hm, je comprends maintenant votre défi. Je pense que ma réponse indique le comportement de log4j, c'est tout sur les chemins de classe. Dans votre cas, je pense que la meilleure solution est de prévoir une configuration commune et (si possible), même de supprimer ceux dans les pots. Ou, alternativement, faire les pots de charge respectifs des fichiers de configuration par programmation (moins de nice je pense).
OriginalL'auteur mkro
Si vous définissez l'additivité de faux en commun des forfaits de ProjectA, Projetb et WebProject votre journal ne fera pas double emploi.
log4j.l'additivité.[connecté package] = false
Par exemple:
log4j.properies -> Un Projet, le Projet B
log4j.l'additivité.org.printemps.cadre = false
Tous org.printemps.cadre du journal viendra de WebProject ignorant ProjectA et Projetb.
Il fonctionne uniquement avec le printemps pot de bûcherons dans mon exemple, mais il peut fonctionner avec n'importe quel pack enregistreur. L'avantage, c'est la suppression d'un enregistreur dans un "supérieur" config.
OriginalL'auteur kauedb