解决JBOSS与log4j冲突的完美配置指南

需积分: 43 3 下载量 168 浏览量 更新于2024-09-13 收藏 67KB DOC 举报
"本文主要介绍了如何解决JBoss与log4j之间的配置冲突,并提供了一种理想的配置方案。主要内容包括修改`jboss-service.xml`和`jbossweb-tomcat55.sar/META-INF/jboss-service.xml`文件,以及创建一个用于初始化的InitServlet来指定log4j的配置文件路径。" 在Java应用服务器JBoss中,log4j作为日志处理框架,有时会遇到与服务器自身的日志系统冲突的问题。为了解决这种冲突,我们可以按照以下步骤进行配置: 1. 调整`jbossweb-tomcat55.sar/META-INF/jboss-service.xml`文件: - 在`jbossweb-tomcat55.sar/META-INF/jboss-service.xml`文件中,找到`Java2ClassLoadingCompliance`和`UseJBossWebLoader`两个属性,将它们都设置为`false`。这样做可以防止JBoss使用自己的类加载机制,从而避免与log4j的类加载冲突。 - 如果你的应用程序目录下有`WEB-INF/jboss-web.xml`文件,同样需要将其中的`java2ClassLoadingCompliance`和`java2ParentDelegation`属性设置为`false`。 2. 修改`jboss-service.xml`文件中的`Log4jService`设置: - 在`jboss-service.xml`的`org.jboss.logging.Log4jService`服务定义中,添加一个名为`CatchSystemOut`的属性,将其值设置为`false`。这将阻止JBoss捕获控制台输出,让log4j能够正常输出日志到控制台。 - 同时,可考虑设置`Log4jQuietMode`为`true`,以便在启动时减少log4j的启动输出。 3. 创建InitServlet来初始化log4j配置: - 创建一个Servlet子类,命名为`InitServlet`,并在其`init`方法中使用`PropertyConfigurator.configure()`方法,指定log4j读取应用程序下`WEB-INF/classes/log4j.properties`的配置文件。这样可以确保log4j使用的是应用级的配置,而不是服务器级别的。 - 在`web.xml`文件中注册这个Servlet,并为其设置初始化参数,以指定`log4j.properties`的位置。 通过以上配置,我们可以有效地解决JBoss与log4j之间的冲突,实现自定义的日志配置。同时,通过InitServlet确保了应用启动时log4j的正确初始化,使得日志输出符合预期。这样的配置方式对于优化日志管理和调试环境十分有帮助。
2013-07-30 上传
deploy/jbossweb-tomcat55.sar/server.xml <Valve className="org.apache.catalina.valves.FastCommonAccessLogValve" prefix="access_log." suffix=".log" pattern="%h %t %r %s %D" directory="${jboss.server.home.dir}/../output/logs" resolveHosts="false" /> http://tomcat.apache.org/tomcat-5.5-doc/config/valve.html pattern配置: %a - Remote IP address %A - Local IP address %b - Bytes sent, excluding HTTP headers, or '-' if zero %B - Bytes sent, excluding HTTP headers %h - Remote host name (or IP address if resolveHosts is false) %H - Request protocol %l - Remote logical username from identd (always returns '-') %m - Request method (GET, POST, etc.) %p - Local port on which this request was received %q - Query string (prepended with a '?' if it exists) %r - First line of the request (method and request URI) %s - HTTP status code of the response %S - User session ID %t - Date and time, in Common Log Format %u - Remote user that was authenticated (if any), else '-' %U - Requested URL path %v - Local server name %D - Time taken to process the request, in millis %T - Time taken to process the request, in seconds %I - current request thread name (can compare later with stacktraces) There is also support to write information from the cookie, incoming header, outgoing response headers, the Session or something else in the ServletRequest. It is modeled after the apache syntax: %{xxx}i for incoming request headers %{xxx}o for outgoing response headers %{xxx}c for a specific request cookie %{xxx}r xxx is an attribute in the ServletRequest %{xxx}s xxx is an attribute in the HttpSession The shorthand pattern name common (which is also the default) corresponds to '%h %l %u %t "%r" %s %b'.