2016-08-04 29 views
1

我正在開發通常在模塊和.war上下文中使用log4j(版本1.2.x)的Java EE應用程序項目。如何通過log4j.xml啓用EAR app log4j在TomEE 7.0.1中登錄?

基本上,經由Maven的模塊設置如下:

| # app-bundle.ear 
| - app-log4j-config.jar 
    | - src/main/resources/log4j.xml 
| - app-backend-module.jar (ejb-module) 
| - app-web-ui-module.war 
| - app-web-service-module.war 

所以我只有整個EAR應用束恰好一個log4j.xml

給定一個TomEE的7.0.x應用服務器環境中,我需要知道,其步驟是必要的,以只記錄所述應用程序特定的日誌消息(經由log4j.xml配置),但不由應用服務器所產生的消息。

E.g.啓動和關閉消息應該到catalina.out,但是應該按照我的log4j配置的指定打印/記錄來自不同後端或web模塊(參見上文)的所有日誌輸出。

我的問題是:

  1. 我需要適應TomEE的默認conf/system.properties以任何方式?如果是這樣,究竟需要添加/編輯什麼?

  2. 我應該把log4j-<version>.jar:在(一)的TomEE的lib(B) withing我EAR捆綁的應用程序文件夾?

我迄今爲止嘗試:

  • 兩個log4j.xml和TomEE安裝liblog4j-<version>.jar - >沒有成功

  • 兩個app-log4j-config.jarlog4j-<version>.jar捆綁在EAR - >無成功

  • 提取在apps/project一起捆綁log4j-<version>.jar - >沒有成功

任何幫助將非常歡迎。

編輯:我在PLUS變種中使用TomEE 7.0.1。

EDIT-2:通過Maven是生成的ear如下:

<dependencies> 
    <dependency> 
     <groupId>de.myapp</groupId> 
     <artifactId>app-log4j-config</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>de.myapp</groupId> 
     <artifactId>app-backend-module</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>ejb</type> 
    </dependency> 
    <dependency> 
     <groupId>de.myapp</groupId> 
     <artifactId>app-web-ui-module</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>war</type> 
    </dependency> 
     <dependency> 
     <groupId>de.myapp</groupId> 
     <artifactId>app-web-service-module</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>war</type> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>${slf4j.version}</version> 
     <type>jar</type> 
     <exclusions> 
      <!-- This dependency will be provided globally in the TomEE deployment --> 
      <exclusion> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-api</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>${log4j.version}</version> 
     <type>jar</type> 
    </dependency> 
</dependencies> 

<build> 
    <finalName>app-bundle</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-ear-plugin</artifactId> 
      <version>2.10.1</version> 
      <!-- configuring the ear plugin --> 
      <configuration> 
       <modules> 
        <webModule> 
         <groupId>de.myapp</groupId> 
         <artifactId>app-web-service-module</artifactId> 
        </webModule> 
        <webModule> 
         <groupId>de.myapp</groupId> 
         <artifactId>app-web-ui-module</artifactId>       
        </webModule> 
        <ejbModule> 
         <groupId>de.myapp</groupId> 
         <artifactId>app-backend-module</artifactId> 
        </ejbModule>       
        <jarModule> 
         <groupId>org.slf4j</groupId> 
         <artifactId>slf4j-log4j12</artifactId> 
         <includeInApplicationXml>true</includeInApplicationXml> 
        </jarModule> 
        <jarModule> 
         <groupId>log4j</groupId> 
         <artifactId>log4j</artifactId> 
         <includeInApplicationXml>true</includeInApplicationXml> 
        </jarModule> 
       </modules> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

log4j.xml是這樣的:

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" 
       value="%d{ISO8601} %-5p [%t] %c{1}(%L): %m%n"/> 
    </layout> 
</appender> 

<appender name="DEBUGFILE" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="datePattern" value="'.'yyyy-MM-dd"/> 
    <param name="file" value="logs/app-bundle-DEBUG.log"/> 
    <param name="Append" value="true"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c{1}(%L): %m%n"/> 
    </layout> 
    <filter class="org.apache.log4j.varia.LevelMatchFilter"> 
     <param name="LevelToMatch" value="debug"/> 
    </filter> 
    <filter class="org.apache.log4j.varia.LevelMatchFilter"> 
     <param name="LevelToMatch" value="info"/> 
    </filter> 
    <filter class="org.apache.log4j.varia.DenyAllFilter"/> 
</appender> 

<appender name="INFOFILE" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="datePattern" value="'.'yyyy-MM-dd"/> 
    <param name="file" value="logs/app-bundle-INFO.log"/> 
    <param name="Append" value="true"/> 
    <param name="Threshold" value="INFO"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c{1}(%L): %m%n"/> 
    </layout> 
    <filter class="org.apache.log4j.varia.LevelMatchFilter"> 
     <param name="LevelToMatch" value="info"/> 
    </filter> 
    <filter class="org.apache.log4j.varia.DenyAllFilter"/> 
</appender> 

<appender name="WARNFILE" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="datePattern" value="'.'yyyy-MM-dd"/> 
    <param name="file" value="logs/app-bundle-WARN.log"/> 
    <param name="Append" value="true"/> 
    <param name="Threshold" value="WARN"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c{1}(%L): %m%n"/> 
    </layout> 
    <filter class="org.apache.log4j.varia.LevelMatchFilter"> 
     <param name="LevelToMatch" value="warn"/> 
    </filter> 
    <filter class="org.apache.log4j.varia.DenyAllFilter"/> 
</appender> 

<appender name="ERRORFILE" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="datePattern" value="'.'yyyy-MM-dd"/> 
    <param name="file" value="logs/app-bundle-ERROR.log"/> 
    <param name="Append" value="true"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c{1}(%L): %m%n"/> 
    </layout> 
    <filter class="org.apache.log4j.varia.LevelMatchFilter"> 
     <param name="LevelToMatch" value="error"/> 
    </filter> 
    <filter class="org.apache.log4j.varia.LevelMatchFilter"> 
     <param name="LevelToMatch" value="fatal"/> 
    </filter> 
    <filter class="org.apache.log4j.varia.DenyAllFilter"/> 
</appender> 

<logger name="de.myapp"> 
    <level value="INFO"/> 
</logger> 

<root> 
    <level value="WARN"/> 
    <!-- 
    <appender-ref ref="CONSOLE"/> 
    --> 
    <appender-ref ref="ERRORFILE"/> 
    <appender-ref ref="WARNFILE"/> 
    <appender-ref ref="INFOFILE"/> 
    <appender-ref ref="DEBUGFILE"/> 
</root> 

編輯-3:我嘗試通過Maven構建一個瘦小的戰爭文件通過構建提到lib目錄:

<defaultLibBundleDir>lib/</defaultLibBundleDir> 
    <skinnyWars>true</skinnyWars> 

這並不要麼成功。

編輯-4:我已經通過

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>${slf4j.version}</version> 
    <type>jar</type> 
</dependency> 

<jarModule> 
    <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <includeInApplicationXml>true</includeInApplicationXml> 
</jarModule> 

添加sl4j-api.jar到EAR捆綁在TomEE啓動按預期在logs目錄中創建的文件。但是,日誌輸出仍然會進入catalina.out而不是在指定的文件中。

EDIT-5:我沒有正確地通過Maven重建項目。最後,sl4j-api.jarEAR捆綁模塊是解決問題的辦法!

回答

2

的問題確實是關係到失蹤slf4j-api在'.ear'建議捆綁。

爲了追查問題,我創建了一個Github Sample,這是slf4j與TomEE在ear上下文中的集成示例。

你需要確保:

  1. slf4j-*和定製的實現需要被捆綁爲jar模塊ear

  2. 共享記錄器配置需要一個自己的模塊,這是捆綁在被提供as jar模塊中的ear

希望這可以幫助遇到同樣問題的人。

2

通常你應該把log4j *放在耳朵的lib部分。什麼不適用於此設置?

編輯:也確保您添加沿slf4j- SLF4J的API,如果你提供自己的SLF4J的IMPL否則它將使用容器一個

+0

我剛剛添加了Maven配置,用於捆綁EAR。在我的理解中,log4j *的東西放在正確的部分?我們在特定的目的地沒有看到任何類型的日誌輸出......相反,所有內容都寫入了catalina。out – rzo

+0

如果你期望使用slf4j,那麼你需要在ear * slf4h-api中提供*,否則你最終會使用容器1的缺省綁定(slf4j-jdk14),它使用JULi(con​​f/logging.properties) –

+0

@rmannibucau能否用你上次評論的信息編輯你的答案?這似乎是有價值/重要的信息。 – MWiesner