如何解決JBoss和log4j沖突
解決jboss和log4j沖突的最理想配置如下:
1.配置$JBOSS-HOME/server/default/deploy/jbossweb-tomcat55.sar/META-INF/jboss-service.xml文件里的Java2ClassLoadingCompliance及UseJBossWebLoader為false,如果你的應(yīng)用下存在WEB-INF/jboss-web.xml,則里面的java2ClassLoadingCompliance及java2ParentDelegaton屬性也都設(shè)置成false。
2.配置$JBOSS-HOME/server/default/jboss-service.xml中的org.jboss.logging.Log4jService的設(shè)置中加個(gè)屬性:
- ﹤attribute name="CatchSystemOut">false﹤/attribute>
即可。
如下:
- ﹤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>
3.建立一個(gè)用于初始化的 InitServlet ,在init方法指定log4j讀取我們應(yīng)用下的的log4j.properties文件,代碼如:
- public void init(ServletConfig config) throws ServletException {
- PropertyConfigurator.configure(config.getServletContext().getRealPath("/")
- + "WEB-INF/classes/log4j.properties");
- }
然后在 web.xml 配置這個(gè) Servlet 的初始化參數(shù)(聲明 log4j.properties 的位置)和啟動(dòng)優(yōu)先級(jí):
- ﹤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目錄下)復(fù)制到你的應(yīng)用/WEB-INF/lib目錄下。
通過這樣的配置后,webapp的log4j和jboss的log4j將相互隔離互不影響,在jboss.4.0.5下測(cè)試通過,并做的總結(jié)。jBoss和log4j的沖突得以解決。
【編輯推薦】