Question

J'ai écrit un appender log4j personnalisé qui crée un nouveau document Solr pour chaque entrée de journal et je ne parviens pas à le déployer sur JBoss.

La source est visible sur github , mais le vrai problème est d'utiliser l'appender de JBoss.

Les bits pertinents de jboss-log4j.xml ressemblent à ceci:

<appender name="SOLR" class="com.stuartgrimshaw.solrIndexAppender.SolrIndexAppender" />

<root>
   <priority value="${jboss.server.log.threshold}"/>
   <appender-ref ref="CONSOLE"/>
   <appender-ref ref="FILE"/>
   <appender-ref ref="SOLR"/>
</root>

Les dépendances de Solr sont toutes disponibles dans le fichier .war fourni, mais j’imagine que lorsque l’appender est initialisé assez tôt dans le processus de démarrage, cette application n’a pas encore été déployée. C’est pourquoi voir cette erreur dans le journal:

2009-11-29 10:40:57,715 ERROR [org.jboss.kernel.plugins.dependency.AbstractKernelController] (main) Error installing to Create: name=jboss.system:service=Logging,type=Log4jService state=Configured mode=Manual requiredState=Create
java.lang.NoClassDefFoundError: org/apache/solr/client/solrj/SolrServerException

Existe-t-il un moyen de retarder l'initialisation jusqu'à ce que l'application Solr soit déployée ou existe-t-il un moyen de déployer l'application Solr pour que ses bibliothèques soient visibles pour jboss lors de son démarrage?

Était-ce utile?

La solution

Je pense que vous pouvez soit déployer les bibliothèques Solr dans server / [jboss-configuration] / lib (dans JBoss 4, c’est-à-dire qu'elles pourraient être identiques dans les versions les plus récentes), puis elles sont disponibles au démarrage.

Ou n'utilisez pas la configuration de JBoss log4j et définissez votre propre fichier log4j.xml dans votre fichier WAR (dans un fichier JAR dans lib ou dans des classes). Il sera chargé par le chargeur de classe de l'application lorsqu'il sera déployé.

Autres conseils

Comme vous l'avez découvert, vous devez placer votre fichier JAR dans le répertoire lib de JBoss config afin de faire référence à ses types dans jboss-log4j.xml . , mais ce n’est généralement pas une bonne pratique.

Une alternative plutôt simple consiste à appeler l'API log4j par programme à partir de l'intérieur de votre application. Si vous avez un fichier WAR, définissez un ServetContextListener (ou quelque chose de similaire) qui est appelé lors du déploiement du fichier WAR et qui attache votre appender. De même, lorsqu'il n'est pas déployé, il détache l'appendeur.

Voir la réponse à cette question précédente pour savoir comment obtenir commencé à le faire.

Je suppose que c’est pour gérer vos fichiers journaux et faciliter leur recherche, à la Splunk ???? Cependant, cela semble être une façon assez étrange de faire cela. genre de chose ... Cool, mais pourquoi voudriez-vous?

Je pense qu’une approche beaucoup plus simple et plus robuste consiste à a) saisir Splunk Free Edition! b) avoir un processus séparé qui consomme vos fichiers journaux depuis le disque et les envoie à Solr en utilisant Solr4J.

Je pense qu'exiger que Solr, le simple fait de se connecter ajoute un énorme niveau de complexité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top