Log4j JBossAS 7.1.1最终日志记录
我有一只耳朵,它把战争作为一种辅助部署。ear文件有一个META-INF目录,其中有一个jboss-ejb-client.xml文件,该文件只有一个ejb receivers元素和一个webscheduler.war。这场战争使用commons-logging-api.jar。此应用程序作为7.1.1.final部署在jboss上。我想使用apachelog4j进行日志记录。因此,我在ear的meta inf目录中添加了一个jboss-deployment-structure.xmlLog4j JBossAS 7.1.1最终日志记录,log4j,jboss7.x,apache-commons-logging,jboss-logging,Log4j,Jboss7.x,Apache Commons Logging,Jboss Logging,我有一只耳朵,它把战争作为一种辅助部署。ear文件有一个META-INF目录,其中有一个jboss-ejb-client.xml文件,该文件只有一个ejb receivers元素和一个webscheduler.war。这场战争使用commons-logging-api.jar。此应用程序作为7.1.1.final部署在jboss上。我想使用apachelog4j进行日志记录。因此,我在ear的meta inf目录中添加了一个jboss-deployment-structure.xml <j
<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>
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),但同时日志也会直接写入jboss日志中的默认srv.log(jboss/standalone/log/srv.log)
如果jboss不使用自己的日志记录并使用我提供的log4j配置,我缺少什么呢。您的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>
确保您是使用标志-Dorg.jboss.as.logging.per deployment=false进行部署的,否则日志记录可能无法工作
例如:
$ cd $JBOSS_HOME/bin
$ ./standalone.sh -Dorg.jboss.as.logging.per-deployment=false
如果您没有使用ACL,那么只需删除上面示例中ACL和JAR的所有模块排除。谢谢您的建议。我不想使用jboss内部捆绑的ACL。因此,我在部署描述符中添加了排除org.apache.commons.logging。据我所知,在jboss 7.1.1.final中现在没有看到per部署标志。不过我还是加了一句。问题是,只有部分应用程序日志进入了我的自定义日志。因此,似乎log4j配置正在接受。但由于某种原因,struts和hibernate库(在我的war中)等编写的日志都进入了jboss日志目录。jboss启动时,一些logOnly和一些log语句被写入我的自定义日志文件。这些logs语句来自我在战争中的一个类。只是澄清一下,org.jboss.as.logging.per deployment
system属性在jboss as 7.1.1.Final中没有使用。您的WAR中的Hibernate库可能没有被使用,因此它们由不同的CL加载,这就是为什么它们没有记录到您的应用程序日志文件中。James我认为是正确的。。。要使用您自己的hibernate,您应该排除jboss hibernate JAR,并通过jboss-deployment-structure.xml包含您自己的JAR日志,希望这会有所帮助
EAR
|-- META-INF
| |-- jboss-deployment-structure.xml
| `-- MANIFEST.MF
|-- lib
| |-- log4j.jar
| `-- commons.logging.jar
`-- a.war
$ cd $JBOSS_HOME/bin
$ ./standalone.sh -Dorg.jboss.as.logging.per-deployment=false