.war
モジュールとコンテキストで一般的に log4j (バージョン 1.2.x) を使用する Java EE アプリケーション プロジェクトに取り組んでいます。
基本的に、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
log4j.xml
したがって、EAR アプリ バンドル全体に対して正確に 1 つしかありません。
TomEE 7.0.x アプリケーション サーバー環境で、アプリケーション固有のログ メッセージ ( で構成log4j.xml
)のみをログに記録し、アプリケーション サーバーによって生成されたメッセージをログに記録しないために必要な手順を知る必要があります。
たとえば、起動とシャットダウンのメッセージは に送信する必要catalina.out
がありますが、異なるバックエンドまたは Web モジュール (上記を参照) からのすべてのログ出力は、log4j 構成で指定されたとおりに出力/記録する必要があります。
私の質問は次のとおりです。
conf/system.properties
TomEEのデフォルトを何らかの方法で変更する必要はありますか? もしそうなら、正確に何を追加/編集する必要がありますか?(
log4j-<version>.jar
a) TomEE内、または(b) EAR バンドルの apps フォルダー内のどこに配置すればよいですか?lib
私がこれまでに試したこと:
TomEE インストールの両方で -> 成功しませ
log4j.xml
んlog4j-<version>.jar
lib
両方
app-log4j-config.jar
とlog4j-<version>.jar
EAR にバンドルされている -> 成功しない一緒にバンドルされて抽出さ
log4j.xml
れました-> 成功しませんでしたapps/project
log4j-<version>.jar
どんな助けでも大歓迎です。
編集: PLUS バリアントで TomEE 7.0.1 を使用しています。
EDIT-2: 次のear
ようにMavenを介して生成されます:
<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>
EDIT-3:Mavenを介してスキニーwarファイルを構築し、上記のlib
ディレクトリを構築しようとしています:
<defaultLibBundleDir>lib/</defaultLibBundleDir>
<skinnyWars>true</skinnyWars>
これも成功しません。
EDIT-4: をsl4j-api.jar
経由して EAR バンドルに追加しました
<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>
TomEE の起動時に、logs
ディレクトリに期待どおりにファイルが作成されます。ただし、log-outputcatalina.out
は、指定されたファイルではなく、引き続き出力されます。
EDIT-5: Maven 経由でプロジェクトを適切に再構築しませんでした。最後に、をEAR バンドル モジュールに追加すると、問題が解決します。sl4j-api.jar