如何解决JBoss和log4j冲突
http://developer.51cto.com 2009-06-12 17:03 unm_www 优快云博客 我要评论(0)
- 摘要:本文说明解决jboss和log4j冲突的解决方案,此方案通过配置Java2ClassLoadingCompliance及UseJBossWebLoader为false,以及在org.jboss.logging.Log4jService的设置中加个属性来完成。
- 标签:JBoss和log4j冲突
解决jboss4.0.5和log4j冲突的最理想配置如下:
解决方法一是不用Console的Appender,或者改jboss的配置文件,在conf/jboss-service.xml文件里,把<mbean code="org.jboss.logging.Log4jService" name="jboss.system:type=Log4jService,service=Logging">
<attribute name="ConfigurationURL">resource:log4j.xml</attribute>
<attribute name="CatchSystemOut">false</attribute> <!--增加部分-->
<attribute name="Log4jQuietMode">true</attribute>
</mbean>。
对于jboss4.0.x如果我们要用自己的log4j配置照上述改还是会有问题,会有类似于log4j:ERROR A "org.jboss.logging.util.OnlyOnceErrorHandler" object is not assignable to a "org.apache.log4j.spi.ErrorHandler" variable的异常,解决方法是把/server/default/deploy/jbossweb-tomcat55.sar/META-INF/jboss-service.xml 中的以下两个熟悉改成true
<attribute name="Java2ClassLoadingCompliance">true</attribute>
<attribute name="UseJBossWebLoader">true</attribute>
- 一般情况下只要执行上面步骤即可
3.建立一个用于初始化的 InitServlet ,在init方法指定log4j读取我们应用下的的log4j.properties文件,代码如:
- public void init(ServletConfig config) throws ServletException {
- PropertyConfigurator.configure(config.getServletContext().getRealPath("/")
- + "WEB-INF/classes/log4j.properties");
- }
然后在 web.xml 配置这个 Servlet 的初始化参数(声明 log4j.properties 的位置)和启动优先级:
- ﹤servlet>
- ﹤servlet-name>InitServlet﹤/servlet-name>
- ﹤servlet-class>InitServlet﹤/servlet-class>
- ﹤load-on-startup>1﹤/load-on-startup>
- ﹤/servlet>
4.把jboss的jboss-common.jar($JBOSS-HOME/lib目录下)复制到你的应用/WEB-INF/lib目录下。
通过这样的配置后,webapp的log4j和jboss的log4j将相互隔离互不影响,在jboss.4.0.5下测试通过,并做的总结。jBoss和log4j的冲突得以解决。
我建议不用 Console 的 Appender ,当然这是对 jboss3.2.x 是这样,对于 jboss4.0.x 如果我们要用自己的 log4j 配置照上述改还是会有问题,会有类似于 log4j:ERROR A "org.jboss.logging.util.OnlyOnceErrorHandler" object is not assignable to a "org.apache.log4j.spi.ErrorHandler" variable 的异常,解决方法是把 /server/default/jbossweb-tomcat55.sar/META-INF/jboss-service.xml 中的以下两个熟悉改成 true
<attribute name="Java2ClassLoadingCompliance">true</attribute>
<attribute name="UseJBossWebLoader">true</attribute> 以上就是使用 jboss 服务器可能出现的问题,解决了这些再来使用 log4j 就比较简单了。
jboss3.2.x 配置$JBOSS-HOME/server/default/deploy /jbossweb-tomcat55.sar/META-INF/jboss-service.xml文件里的 Java2ClassLoadingCompliance及UseJBossWebLoader为false,如果你的应用下存在WEB- INF/jboss-web.xml,则里面的java2ClassLoadingCompliance及java2ParentDelegaton属性 也都设置成false。