2009-02-13 1 views
3

J'utilise le serveur JBOSS 4.2.2 pour déployer plusieurs applications Web. Chaque application utilise Hibernate et pour chaque application, il y a des fichiers journaux Saperate et SAPARATE appendar. Maintenant, pour Hibernate, les instructions de journalisation d'une application doivent figurer dans le fichier journal de cette application particulière. Est-ce que quelqu'un a une idée de comment configurer le fichier log4j.xml pour y parvenir?Comment diriger des instructions de journalisation hibernate dans différents fichiers journaux pour des applications differnet en utilisant le fichier jboss-log4j.xml

Merci et salutations, Milind

+1

Pour clarifier la question: JBossAS utilise log4j pour sa propre exploitation forestière, donc une application déployée sur le le serveur ne peut pas configurer log4j pour son propre usage (au moins pas facilement, IIRC). L'approche "recommandée" consiste pour toutes les applications à ajouter leurs configurations de journalisation à jboss-log4j.xml. Si deux applications utilisent Hibernate, tous les journaux de la catégorie org.hibernate de l'un d'entre eux iront au même appender. Milind veut qu'ils vont à différents fichiers journaux. –

Répondre

0

Si vous avez plusieurs applications en cours d'exécution chaque mise en veille prolongée il suffit de créer une mise en veille prolongée dans appender pour l'application fichier log4j.xml avec le classpath des classes de mise en veille prolongée à savoir org.hibernate et cela devrait diriger la sortie dans le fichier journal spécifié.

Si cela ne fonctionne pas, vérifiez que Hibernate ne récupère pas un fichier de propriétés log4j qui a été regroupé dans l'un de vos fichiers de bibliothèque. Si mise en veille prolongée ne parvient pas à trouver le fichier log4j.xml alors vous devriez obtenir un message d'avertissement dans system.out

karl

+1

Je suppose que la question est de savoir comment diviser les messages du journal org.hibernate entre différents fichiers journaux pour chaque application Web. –

0

Je ne suis pas sûr à 100% si je comprends bien votre problème. Je suppose que vous voulez diriger la sortie du même enregistreur vers différents fichiers en fonction de l'application qui émet l'instruction log. Log4J fournit un Mapped Diagnostic context. Ce contexte peut être défini sur une valeur différente (en fonction de votre application) avant l'exécution du code d'hibernation. Chaque instruction de journal émise par hibernate contient alors aussi le contenu du MDC. Avec cela, vous pouvez écrire un appender spécial qui inspecte le contenu du MDC et écrit le message du journal dans différents fichiers.

J'ai utilisé cette approche dans une application multi-thread lourde où chaque thread produit son propre fichier journal et il fonctionne très bien.

0
  1. Ajout d'un NDC. Les logs vont toujours au même fichier, mais le fichier sera beaucoup plus facile à grep.
  2. Modifier le classloading JBoss de sorte que chaque application peut avoir sa propre log4j.xml
2

Dans JBoss, vous pouvez utiliser le filtre TCL comme décrit here. Ajoutez simplement le filtre à la partie de la configuration que vous voulez manipuler.

Exemple (légèrement adaptée de la source ci-dessus, consultez la section Déploiement Application Comme .war fichier):

<appender name="App1Log" class="org.apache.log4j.FileAppender"> 
    <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler" /> 
    <param name="Append" value="false"/> 
    <param name="File" value="${jboss.server.log.dir}/app1.log"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{ISO8601} %-5p [%8.8t][%20.20c] %m%n"/> 
    </layout> 
    <filter class="org.jboss.logging.filter.TCLFilter"> 
     <param name="AcceptOnMatch" value="true"/> 
     <param name="DeployURL" value="app1-exp.war"/> 
    </filter> 
</appender> 
Questions connexes