Log4j JBossAS 7.1.1最终日志记录

Log4j 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

我有一只耳朵,它把战争作为一种辅助部署。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

<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