我的耳朵有一个战争作为子部署。 ear文件有一个META-INF目录,它有一个jboss-ejb-client.xml文件,它只有一个ejb-recievers元素和一个webscheduler.war。这场战争使用了commons-logging-api.jar。此应用程序在jboss上部署为7.1.1.final。我想使用apache log4j进行日志记录。所以我在耳朵的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 /共享/第w / JBoss的/ JBoss的-AS-7.1.1 /独立/配置/的log4j.xml
除了log4j-1.2.11.jar之外,我在lib中没有任何其他日志框架jar(如SLF4j等)。如您所见,log4j.xml位于上述属性描述的目录中。
问题是当我启动jboss时,一些应用程序日志会写入log4j.xml中描述的日志文件(比如/a/b/c/srv.log),但同时日志也会被写入直接在jboss日志中使用默认的srv.log。(jboss / standalone / log / srv.log)。
我缺少jboss不使用自己的日志记录并使用我提供的log4j配置。
答案 0 :(得分:2)
您的jboss-deployment-structure.xml应如下所示:
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.apache.log4j"/>
<module name="org.apache.commons.logging"/>
</exclusions>
</deploymen>
<sub-deployment name="a.war">
<exclusions>
<module name="org.apache.log4j"/>
<module name="org.apache.commons.logging"/>
</exclusions>
</sub-deployment>
</jboss-deployment-structure>
你应该在你的项目lib目录中包含你自己的jar。例如:
EAR
|-- META-INF
| |-- jboss-deployment-structure.xml
| `-- MANIFEST.MF
|-- lib
| |-- log4j.jar
| `-- commons.logging.jar
`-- a.war
确保使用标记-Dorg.jboss.as.logging.per-deployment=false
进行部署,否则日志记录可能无效。
示例:
$ cd $JBOSS_HOME/bin
$ ./standalone.sh -Dorg.jboss.as.logging.per-deployment=false