Problème avec Commons Logging / Log4j setup dans webapp de printemps avec tomcat 6
J'ai un problème avec un enregistrement à l'installation dans un apring webapp déployée sous tomcat 6.
De la webapp utilise le commons-logging de l'api, de l'exécution log4j doit être utilisé. Le fichier journal est créé mais reste vide - aucune entrée de journal se produire.
la configuration est la suivante:
WEB-INF/web.xml:
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
WEB-INF/classes/commons-logging.propriétés:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
WEB-INF/log4j.xml:
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
...
</appender>
<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="${catalina.home}/logs/my.log"/>
...
</appender>
<logger name="my.package">
<level value="INFO"/>
</logger>
<root>
<level value="ERROR"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</log4j:configuration>
Les fichiers de logs/ma.journal est créé, mais pas de journaux apparaissent. Le sont les journaux d'info sur le tomcat de la console, mais pas avec le patron de mise en page configuré.
L'commons-logging-1.1.1.jar et log4j-1.2.14.jar sont inclus dans WEB-INF/lib. Aucune idée de ce qu'est le problème ici?
source d'informationauteur Arne Burmeister
Vous devez vous connecter pour publier un commentaire.
Il existe de nombreux cas documentés sur le web avertir les gens au sujet de l'utilisation de commons-logging. Tant et si bien, que SLF4J gagne beaucoup de popularité.
Considérant que vous n'êtes pas intéressés par l'utilisation de Tomcat avec Log4j, vous devriez utiliser Log4j directement dans votre application. Surtout si il n'y a aucune chance que vous serez commutation de journalisation des cadres dans l'avenir. Il va réduire la complexité de votre application, et de se débarrasser de toute la classe loader problèmes que vous rencontrez avec commons-logging.
Cela devrait être relativement facile de rechercher et de remplacer dans votre texte, que commons-logging et log4j utiliser un appel similaire de la structure de leurs méthodes de journalisation.
Être particulièrement attentif à ce que vous avez pas placé log4j.jar dans le Tomcat communes/lib. Si la racine du chargeur de classe de charge de la log4j bibliothèques, vous rencontrerez dans les conflits et l'initialisation des problèmes lors de votre webapps également essayer d'utiliser log4j.
Si vous avez besoin d'utiliser log4j pour la commune de Tomcat enregistrement, vous devez être attentif à ce que vos webapps ne pas tenter de charger log4j. Si vous avez plusieurs webapps sur le serveur, alors vous aurez besoin de discipline que chaque webapp du journal de l'initialisation de ne pas taper du pied sur l'initialisation d'autres webapps. Chaque webapp aurez besoin d'utiliser unique Enregistreur Id, qui peut être réalisée avec un seul paquet de noms.
À l'aide d'un commun log4j dans Tomcat avec plusieurs webapps provoque de graves conflits lorsque vous avez bibliothèques partagées qui veulent tous faire de journalisation, tels que la mise en veille ou au Printemps. La prochaine webapp qui tente d'initialiser log4j peut fermer, l'enregistreur de données de la précédente. Il peut être un gâchis.
J'ai eu le même problème et a trouvé un corrigé maintenant.
Démarrer tomcat avec un paramètre supplémentaire:
-Dorg.apache.commons.la journalisation.LogFactory=org.apache.commons.la journalisation.impl.LogFactoryImpl
Vous avez besoin de compiler l'élément supplémentaire pour plein commons-logging. Par défaut, Tomcat 6 utilise une codé en dur de la mise en œuvre de commons-logging que toujours les délégués à java.util.la journalisation.
D'instructions pour la construction ici http://tomcat.apache.org/tomcat-6.0-doc/building.html
Puis remplacez le tomcat-juli.jar dans le répertoire /bin de Tomcat et de la place de la tomcat-juli-adapters.jar dans le répertoire /lib avec log4j et config.
si vous utilisez log4j +commune de journalisation, vous pouvez éviter la plupart des configurations ci-dessus. commune de journalisation LogFactory ont une fonction de découverte similaire à JAXP, dans de priorité suivant, à la recherche pour le Journal des implémentations,
1. attribut de configuration org.apache.commons.la journalisation.Connectez-vous dans le fichier commons-logging.propriétés
2. le système de la propriété org.apache.commons.la journalisation.Journal
3. Si le Log4J disponible au chemin de classe, utilisez la classe wrapper (Log4JLogger).
4. Jdk14Logger
5. SimpleLog
assurez-vous, à la fois common-logging.jar et common-logging-api.jar et log4j.jar au classpath.
Peut-être que je me trompe. Essayez les opérations suivantes:
A) Ajouter appender à mon.package:
OU
B) Réduire le journal leve de racine d'INFO