在jboss中使用log4j时,因为jboss本身也使用log4j记录日志,常常会出现应用自己的日志会被记录到jboss的日志文件里或报appender closed。这是由于jboss首先加载自己身的log4j文件,后续又加载了应用身的log4j配置文件导致。最终解决方法如下:
配置jboss_server_home/deploy/jbossweb-tomcat55.sar/META-INF/jboss-service.xml文件里的Java2ClassLoadingCompliance及UseJBossWebLoader为false,如果自己的应用里存在WEB-INF/jboss-web.xml,则里面的java2ClassLoadingCompliance及java2ParentDelegaton属性也都设置成false。这样jboss加载webapp将使用JBoss 隔离的UCL作为Classloader。
在开发时,偶碰到一个奇怪的问题,简单的webapp加载log4j配置文件测试没有问题,能正常输出日志。但在使用spring的webapp中不会加载log4j.xml或log4j.properties,在web.xml中强行加载log4j配置得以解决,即在web.xml增加以下配置:
当设置Java2ClassLoadingCompliance及UseJBossWebLoader为false时,会导致webapp有可能找到不在jboss配置的数据库连接池,偶在连接池配置文件中增加了<use-java-context>false</use-java-context>,引用jndi时就不需要加java:。
官方对log4j的配置说明请参考:
[url=http://docs.jboss.org/process-guide/en/html/logging.html]jboss官方log4j配置用户手册[/url]
配置jboss_server_home/deploy/jbossweb-tomcat55.sar/META-INF/jboss-service.xml文件里的Java2ClassLoadingCompliance及UseJBossWebLoader为false,如果自己的应用里存在WEB-INF/jboss-web.xml,则里面的java2ClassLoadingCompliance及java2ParentDelegaton属性也都设置成false。这样jboss加载webapp将使用JBoss 隔离的UCL作为Classloader。
在开发时,偶碰到一个奇怪的问题,简单的webapp加载log4j配置文件测试没有问题,能正常输出日志。但在使用spring的webapp中不会加载log4j.xml或log4j.properties,在web.xml中强行加载log4j配置得以解决,即在web.xml增加以下配置:
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
当设置Java2ClassLoadingCompliance及UseJBossWebLoader为false时,会导致webapp有可能找到不在jboss配置的数据库连接池,偶在连接池配置文件中增加了<use-java-context>false</use-java-context>,引用jndi时就不需要加java:。
官方对log4j的配置说明请参考:
[url=http://docs.jboss.org/process-guide/en/html/logging.html]jboss官方log4j配置用户手册[/url]