【问题标题】:Using application's Log4J configuration under JBoss 7.1.1在 JBoss 7.1.1 下使用应用程序的 Log4J 配置
【发布时间】:2013-01-06 12:46:31
【问题描述】:

我在使用 XML log4j 配置文件中定义的附加程序进行日志记录时遇到问题。

我在 EAR 的 META-INF 文件夹中创建了 jboss-deployment-structure.xml,但没有成功。

jboss-deployment-structure.xml 结构是:

<jboss-deployment-structure>
<ear-subdeployments-isolated>false</ear-subdeployments-isolated>
    <deployment>
        <exclusions>
            <module name="org.apache.log4j" slot="main"/>
        </exclusions>
    </deployment>
</jboss-deployment-structure>

我什至尝试编辑我的 standalone.conf.bat 文件,添加以下行:

set "JAVA_OPTS=%JAVA_OPTS% -Dorg.jboss.as.logging.per-deployment=false"

我的应用部署是这样的:

-> MyAppEAR.ear
   -> META-INF
      -> MANIFEST.MF
   -> MyAoo.war
      -> META-INF
         -> MANIFEST.MF
         -> jboss-deployment-structure.xml
      -> WEB-INF
         -> web.xml
         -> lib
            -> log4j-1.2.17.jar
            -> ---
         -> classes
            -> log4j.xml
            -> ...

我注意到以下错误:

  • 子部署中的 jboss-deployment-structure.xml 被忽略。 jboss-deployment-structure.xml 仅针对顶级部署进行解析。

我什至尝试从 JBOSS 7.1.0 迁移到 7.1.1

请帮忙!

谢谢


感谢詹姆斯的回复。

我照你说的做了,并将 jboss-deployment-structure.xml 文件移至 MyAppEAR.ear/META-INF

我注意到这种方式异常:

jboss-deployment-structure.xml in subdeployment ignored. jboss-deployment-structure.xml is only parsed for top level deployments.

... 没有发生。我不知道这是否意味着文件被解析了......我怎么知道?

尽管有这种新行为,我的 log4j.xml 配置文件仍然没有加载,并且使用的记录器仍然是 Log4J 的。

我知道这是因为我写信给控制台:

System.out.println(Logger.getRootLogger().getClass().toString())

...得到:

class org.jboss.logmanager.log4j.BridgeLogger

我也试过了:

  • 将我的 log4j.xml 移动到 MyAppEAR.ear/META-INF
  • standalone.conf.bat 中删除不必要的 -Dorg.jboss.as.logging.per-deployment=false
  • 从我的 jboss-deployment-structure.xml 中删除 slot

还有什么想法吗?

谢谢

【问题讨论】:

    标签: java logging jboss log4j jboss7.x


    【解决方案1】:

    您好 RedEagle,请参阅我测试过的以下配置,并且工作正常...
    Step-1 创建一个新模块为

    jboss-as-7.1.1.Final/modules/com/company/mylog/main/

                              -module.xml
                              -log4j-1.2.14.jar
    
    Content of  module.xml
    
    
     <?xml version="1.0" encoding="UTF-8"?>
          <module xmlns="urn:jboss:module:1.0" name="com.company.mylog">
        <resources>
          <resource-root path="log4j-1.2.14.jar"/>
        </resources>
        <dependencies>
          <module name="javax.api"/>
             </dependencies>
          </module>
    

    第 2 步 现在在 my.ear/META-INF/

              -jboss-deployment-structure.xml
              -MANIFEST.MF
    

    jboss-deployment-structure.xml 的内容

     <jboss-deployment-structure>
                  <deployment>
    
                      <exclusions>
                      <module name="org.apache.log4j" />
                      </exclusions>
    
                  </deployment>
    
    
                  <sub-deployment name="MyWeb.war">
                        <exclusions>
                        <module name="org.apache.log4j" />
                        </exclusions>
                  </sub-deployment>
    
                  <sub-deployment name="MyBeans.jar">
                    <exclusions>
                      <module name="org.apache.log4j" />
                    </exclusions>
                  </sub-deployment>
    
    
                  </jboss-deployment-structure>
    

    MANIFEST.MF 的内容

            Manifest-Version: 1.0
            Dependencies: com.company.mylog
    

    第三步 MyLogger.java 的内容

    public static Logger getLogger(String name) {
    
        Logger  logger= LogManager.getLogger(name);
        PropertyConfigurator.configure("log4j.properties"); //Path to log4j.properties as many option available in my case for testing i used static path /home/gyani/log4j.properties
        return logger;
    }
    

    第四步 这里是 log4j.properties

    log4j.rootLogger=info,gyani
    log4j.appender.gyani=org.apache.log4j.RollingFileAppender
    log4j.appender.gyani.File=/home/gyani/myserverlog.log
    log4j.appender.gyani.Append=true
    log4j.appender.gyani.MaxFileSize=100000KB
    log4j.appender.gyani.MaxBackupIndex=10
    log4j.appender.gyani.layout=org.apache.log4j.PatternLayout
    log4j.appender.gyani.layout.ConversionPattern=[%d{MMM d HH:mm:ss yyyy}] [%-5p] [%c]: %m%n
    

    【讨论】:

    • 感谢 gYanl!那行得通!我什至不需要所有这些步骤。我所做的只是在 EAR 的 META-INF 文件夹中创建 jboss-deployment-structure.xml。
    【解决方案2】:

    您的jboss-deployment-structure.xml 需要在您的MyAppEAR.ear/META-INF 目录中。在这种情况下也不需要slot 属性。

    JBoss AS 7.1.1.Final 中也没有使用 -Dorg.jboss.as.logging.per-deployment=false,但它也没有任何影响。

    【讨论】:

    • 你好詹姆斯。还有什么想法吗?谢谢
    • 尝试将 log4j 库移动到 MyAppEAR.ear/lib。
    • 您可以发布您的 log4j 配置文件吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 2012-12-29
    • 2012-06-29
    • 2019-03-10
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多