2009-11-29 306 views
1

我已经编写了一个自定义log4j appender,为每个日志条目创建一个新的Solr文档,并且在将它部署到JBoss时遇到问题。我应该如何处理自定义Log4j appender dependancies

来源可在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文件可用,但我猜测,当附加器被初始化相当早在启动过程中,该应用程序尚未部署的是,这就是为什么我在日志中看到以下错误:

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应用程序,因此它是库jboss在启动时是否可见?

回答

3

我认为你可以在服务器/ [jboss-configuration]/lib(在JBoss 4中,也许在新版本中可能是相同的)部署Solr库,然后它们在引导时可用。

或者不要在WAR中使用JBoss log4j配置并定义自己的log4j.xml(在lib或类中的JAR中)。它将在部署时由应用程序类加载器加载。

+0

我试过在我想使用的配置文件的lib目录中部署Solr库,但是如果我还部署了Solr网络应用程序,它会给我他们的默认管理界面,我会收到其他Solr邮件列表建议的错误是因为我在两个地方部署了libs。 我可以尝试从solr.war文件中提取库,并将它们部署在/lib中,并将其余部分部署到/deploy/ – 2009-11-29 16:03:23

+0

个人而言,我更喜欢第二种选择,我在应用程序中执行日志记录级别,而不是容器/服务器级别。 – 2009-11-29 21:02:12

1

正如你已经发现的,你必须把你的JAR放入JBoss配置的lib目录中,以便引用其在jboss-log4j.xml中的类型,但这通常不是好的做法。

一个非常简单的选择是从应用程序内部以编程方式调用log4j API。如果你有WAR,那么定义一个ServetContextListener(或类似的东西),当WAR部署并且附加你的appender时调用。同样,在取消部署时,它会分离appender。

请参阅this previous question的答案,了解如何开始执行此操作。

0

我猜测这是为了管理你的日志文件,并使它们更容易搜索,一个Splunk?然而,这种感觉就像是一种非常奇怪的做法......类似于“看,我可以让它在后腿上行走”是一种很酷的事情,但是你为什么要这么做呢?

我认为一个更简单,更强大的方法是a)抓取Splunk免费版! b)有一个独立的进程,使用Solr4J从磁盘消耗日志文件并将它们发送到Solr。

我认为要求Solr只是做日志记录会增加一个巨大的复杂程度。

+0

当我看着Splunk的时候,我有着完全相反的反应,我想“这是很多的安装,所以我可以搜索一个日志文件”:-) 我可以看到Splunk的吸引力,但对我的要求来说它是过度的。 – 2009-11-30 20:32:21

+0

我的同事斯科特最近提出了我的答案,并且我的想法已经发展。如果您真的*在日志文件中使用数据,那么可能直接将它们附加到Solr中可能会很酷。但是我仍然想把它们写在磁盘上,或者将它们发送到Syslog作为中间步骤,然后将它们发送到它们的最终存储库,无论您自己的Solr还是像Loggly.com或Splunk这样的服务是“松散的耦合“的路要走。 – 2011-03-31 20:05:34

+0

也有Facebook的Scribe项目,这是一个完整的Splunk安装和滚动你自己的Solr应用程序和搜索日志之间的中间地带。 – 2011-04-02 13:25:37