문제

나는 각 로그 항목에 대한 새 Solr 문서를 작성하는 사용자 정의 log4j appender를 작성했으며 Jboss에 배포하는 데 문제가 있습니다.

소스를 볼 수 있습니다 github 그러나 실제 문제는 Jboss의 Appender를 사용하려고하는 것입니다.

Jboss-log4j.xml의 관련 비트는 다음과 같습니다.

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

Solr의 종속성은 모두 제공되는 .WAR 파일에서 사용할 수 있지만 부팅 프로세스 초기에 Appender가 초기에 초기화되었을 때 해당 애플리케이션이 아직 배포되지 않았기 때문에이 오류가 표시되는 이유가 있습니다. 로그에서 :

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

Solr 앱이 배포 될 때까지 초기화를 지연시킬 수있는 방법이 있습니까? 아니면 SOLR 앱을 배포하여 라이브러리가 부츠를 부팅하는 동안 라이브러리가 표시되는 방법이 있습니까?

도움이 되었습니까?

해결책

Server/[jboss-configuration]/lib에 Solr Libs를 배포 할 수 있다고 생각합니다 (즉, Jboss 4에서는 최신 버전에서 동일 할 수 있음). 부팅 시간에 사용할 수 있습니다.

또는 Jboss log4J 구성을 사용하지 말고 전쟁에서 자신의 log4j.xml (lib 또는 클래스에있는 항아리)에서 자신의 log4j.xml을 정의하십시오. Application ClassLoader가 배포 될 때로드됩니다.

다른 팁

당신이 발견했듯이, 당신은 Jboss config의 항아리를 넣어야합니다. lib 유형을 참조하기 위해 디렉토리 jboss-log4j.xml, 그러나 이것은 일반적으로 좋은 관행이 아닙니다.

꽤 똑바로 대안은 응용 프로그램 내부에서 프로그래밍 방식으로 LOG4J API를 호출하는 것입니다. 전쟁이 있으면 a를 정의하십시오 ServetContextListener (또는 유사한 것) 전쟁이 배치 될 때 호출되고 애착자를 첨부합니다. 마찬가지로, 배치되지 않으면, 그것은 애플 렌더를 분리합니다.

답변을 참조하십시오 이 이전 질문 이 작업을 시작하는 방법에 대해.

나는 이것이 당신의 로그 파일을 관리하고 검색하기 쉽게 만드는 것이라고 생각합니다, la splunk ???? 그러나 이것은 상당히 이상한 방법처럼 느껴집니다.

나는 훨씬 더 단순하고 강력한 접근 방식이 a) 스플런트 프리 에디션을 잡는 것이라고 생각합니다! b) 디스크에서 로그 파일을 소비하고 solr4J를 사용하여 Solr로 보내는 별도의 프로세스가 있습니다.

로깅을하기 위해서는 Solr이 필요하다고 생각하면 엄청난 수준의 복잡성이 추가됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top