2013-01-06 84 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