如何解决JBoss和log4j冲突

本文介绍了解决JBoss服务器与log4j框架冲突的方法。主要通过修改配置文件中的Java2ClassLoadingCompliance及UseJBossWebLoader属性,并调整log4j服务配置来实现。同时提供了一个自定义log4j配置的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何解决JBoss和log4j冲突

http://developer.51cto.com  2009-06-12 17:03  unm_www  优快云博客  我要评论(0)

解决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>
  1. 一般情况下只要执行上面步骤即可

3.建立一个用于初始化的 InitServlet ,在init方法指定log4j读取我们应用下的的log4j.properties文件,代码如:

  1. public void init(ServletConfig config) throws ServletException {   
  2.     PropertyConfigurator.configure(config.getServletContext().getRealPath("/")  
  3. + "WEB-INF/classes/log4j.properties");  
  4. }  

然后在 web.xml 配置这个 Servlet 的初始化参数(声明 log4j.properties 的位置)和启动优先级:

  1. ﹤servlet>   
  2.   ﹤servlet-name>InitServlet﹤/servlet-name>   
  3.   ﹤servlet-class>InitServlet﹤/servlet-class>   
  4.   ﹤load-on-startup>1﹤/load-on-startup>   
  5. ﹤/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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值