2013-01-06 56 views
8

我在使用我的XML log4j配置文件中定义的appender进行日志记录时遇到了问题。在JBoss 7.1.1下使用应用程序的Log4J配置

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

JBoss的部署,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的部署,structure.xml在子部署忽略。 jboss-deployment-structure.xml仅针对顶级部署进行解析。

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

一些帮助,请!

感谢


感谢repply詹姆斯。

我没有你所说的话和移动JBoss的部署,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的。

我知道这becaused我写信给控制台:

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

...并得到了:

class org.jboss.logmanager.log4j.BridgeLogger 

我也试过:

  • 移动我的的log4j .xmlMyAppEAR.ear/META-INF
  • 删除不必要的-Dorg.jboss.as.logging。每部署=假standalone.conf.bat
  • 去除插槽从我JBoss的部署,structure.xml

任何更多的想法?

感谢

回答

5

RedEagle喜见下面的配置,我已经测试其工作正常...
第1步 创建一个新模块,如

jboss-as-7.1.1.Final/modules/ COM /公司/ mylog /主/

      -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部署-structure.xml MANIFEST.MF

<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-Version: 1.0 
     Dependencies: com.company.mylog 

步骤3 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; 
} 

的内容的Step- 4 这里是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 
+2

谢谢gYanl!这工作!我甚至不需要所有这些步骤。我所做的只是在EAR的META-INF文件夹中创建jboss-deployment-structure.xml。 – RedEagle

1

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

此外,-Dorg.jboss.as.logging.per-deployment=false没有在JBoss AS 7.1.1.Final中使用,但它也没有伤害任何东西。

+0

你好詹姆斯。还有什么想法?谢谢 – RedEagle

+0

尝试将log4j库移至MyAppEAR.ear/lib。 –

+0

再次感谢詹姆斯。试过,但没有成功一次... – RedEagle