3

我的耳朵有一个作为子部署的战争。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 配置。

4

1 回答 1

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

确保您使用 flag 进行部署-Dorg.jboss.as.logging.per-deployment=false,否则日志记录可能无法正常工作。

例子:

$ cd $JBOSS_HOME/bin
$ ./standalone.sh -Dorg.jboss.as.logging.per-deployment=false
于 2013-03-06T22:57:38.617 回答