1

.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 構成で指定されたとおりに出力/記録する必要があります。

私の質問は次のとおりです。

  1. conf/system.propertiesTomEEのデフォルトを何らかの方法で変更する必要はありますか? もしそうなら、正確に何を追加/編集する必要がありますか?

  2. (log4j-<version>.jar a) TomEE内、または(b) EAR バンドルの apps フォルダー内のどこに配置すればよいですか? lib

私がこれまでに試したこと:

  • TomEE インストールの両方で -> 成功しませlog4j.xmllog4j-<version>.jarlib

  • 両方app-log4j-config.jarlog4j-<version>.jarEAR にバンドルされている -> 成功しない

  • 一緒にバンドルされて抽出さlog4j.xmlれました-> 成功しませんでしたapps/projectlog4j-<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

4

2 に答える 2

2

この問題はslf4j-api、示唆されているように、「.ear」バンドルの欠落に実際に関連していました。

問題を追跡するために、コンテキスト内で TomEE と統合する方法の例であるGithub サンプルを作成しました。slf4jear

次のことを確認する必要があります。

  1. slf4j-*jarカスタム実装は、モジュールとしてバンドルする必要がありますear

  2. jar共有ロガー構成は、モジュールとしてバンドルされている独自のモジュールで提供する必要があります。ear

これが同じ問題を経験した人に役立つことを願っています。

于 2016-08-08T08:45:22.817 に答える
2

通常は耳の lib 部分に log4j* を配置する必要があります。このセットアップで正確に機能しないのは何ですか?

編集: また、slf4j に沿って slf4j-api を追加してください。slf4j の独自の impl を提供する場合は、それ以外の場合はコンテナー 1 を使用します。

于 2016-08-04T18:21:46.333 に答える