我正在開發通常在模塊和.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模塊(參見上文)的所有日誌輸出。
我的問題是:
我需要適應TomEE的默認
conf/system.properties
以任何方式?如果是這樣,究竟需要添加/編輯什麼?我應該把
log4j-<version>.jar
:在(一)的TomEE的lib
或(B) withing我EAR捆綁的應用程序文件夾?
我迄今爲止嘗試:
兩個
log4j.xml
和TomEE安裝lib
log4j-<version>.jar
- >沒有成功兩個
app-log4j-config.jar
和log4j-<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.jar
到EAR捆綁模塊是解決問題的辦法!
我剛剛添加了Maven配置,用於捆綁EAR。在我的理解中,log4j *的東西放在正確的部分?我們在特定的目的地沒有看到任何類型的日誌輸出......相反,所有內容都寫入了catalina。out – rzo
如果你期望使用slf4j,那麼你需要在ear * slf4h-api中提供*,否則你最終會使用容器1的缺省綁定(slf4j-jdk14),它使用JULi(conf/logging.properties) –
@rmannibucau能否用你上次評論的信息編輯你的答案?這似乎是有價值/重要的信息。 – MWiesner