我的耳朵有一个作为子部署的战争。ear 文件有一个 META-INF 目录,其中有一个 jboss-ejb-client.xml 文件,该文件只有一个 ejb-recievers 元素和一个 webscheduler.war。这场战争使用了 commons-logging-api.jar。此应用程序在 jboss 上部署为 7.1.1.final。我想使用 apache log4j 进行日志记录。于是我在ear的meta-inf目录下添加了一个jboss-deployment-structure.xml
<jboss-deployment-structure>
<deployment>
<!-- Exclusions allow you to prevent the server from automatically adding some dependencies -->
<exclusions>
<module name="org.apache.log4j" />
<module name="org.log4j"/>
<module name="org.jboss.logging"/>
</exclusions>
</deployment>
<sub-deployment name="a.war">
<exclusions>
<module name="org.apache.log4j"/>
<module name="org.log4j"/>
<module name="org.jboss.logging"/>
</exclusions>
</sub-deployment>
</jboss-deployment-structure>
我在战争的 lib 目录中有一个 commons-logging.properties 文件,其中包含以下内容,
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl
log4j.configuration=/usr/share/wth/jboss/jboss-as-7.1.1/standalone/configuration/log4j.xml
此外,除了 log4j-1.2.11.jar,我在 lib 中没有任何其他日志框架 jar。(如 SLF4j 等)。如您所见,log4j.xml 位于上述属性所描述的目录中。
问题是当我启动 jboss 时,一些应用程序日志确实被写入 log4j.xml 中描述的日志文件(比如 /a/b/c/srv.log),但同时日志也被写入默认 srv。直接登录 jboss 日志。(jboss/standalone/log/srv.log)。
我缺少什么让 jboss 不使用自己的日志记录并使用我提供的 log4j 配置。