Pregunta

He escrito un apéndice log4j personalizado que crea un nuevo documento Solr para cada entrada de registro y tengo problemas para implementarlo en JBoss.

La fuente se puede ver en github pero el verdadero problema es intentar utilizar el apéndice de JBoss.

Los bits relevantes de jboss-log4j.xml se ven así:

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

Las dependencias de Solr están disponibles en el archivo .war que se proporciona, pero supongo que cuando el apéndice se inicializa bastante temprano en el proceso de arranque, esa aplicación aún no se ha implementado, por lo que vea este error en el registro:

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

¿Hay alguna forma de retrasar la inicialización hasta que se haya implementado la aplicación solr, o hay una manera de implementar la aplicación Solr para que jboss pueda ver sus bibliotecas mientras se inicia?

¿Fue útil?

Solución

Creo que podría desplegar las librerías Solr en el servidor / [jboss-configuration] / lib (en JBoss 4, es decir, podría ser el mismo en las versiones más recientes), luego están disponibles en el momento del arranque.

O no use la configuración de JBoss log4j y defina su propio log4j.xml en su WAR (ya sea en un JAR en lib o en clases). Será cargado por el cargador de clases de la aplicación cuando se implemente.

Otros consejos

Como descubrió, tendría que poner su JAR en el directorio lib de la configuración de JBoss para hacer referencia a sus tipos en jboss-log4j.xml , pero esto generalmente no es una buena práctica.

Una alternativa bastante sencilla es invocar la API log4j mediante programación desde el interior de su aplicación. Si tiene un WAR, defina un ServetContextListener (o algo similar) que se invoca cuando se despliega el WAR, y que conecta su apéndice. Del mismo modo, cuando no se implementa, se separa el apéndice.

Vea la respuesta a esta pregunta anterior sobre cómo obtener comenzó a hacer esto.

Supongo que esto es para administrar sus archivos de registro y hacerlos más fáciles de buscar, a la Splunk ???? Sin embargo, esto se siente como una forma bastante extraña de hacer esto ... algo así como el "aspecto, puedo hacer que un perro camine sobre sus patas traseras". tipo de cosas ... Genial, pero ¿por qué quieres hacerlo?

¡Creo que un enfoque mucho más simple y robusto es a) tomar Splunk Free Edition! b) tenga un proceso separado que consuma sus archivos de registro del disco y los envíe a Solr usando Solr4J.

Creo que requerir Solr, solo para iniciar sesión agrega un gran nivel de complejidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top