web-dev-qa-db-ja.com

単一のlog4j2 xmlファイルを使用したlog4j2およびlog4jの構成

アプリケーションをlog4j 2に移行し、log4j2.xmlを介して設定しました

ただし、使用しているライブラリの一部はlog4j 1に依存しています。

-Dlog4j.configurationFile=path/to/log4j2.xml

log4j 1は、構成ファイルが見つからないというメッセージを出します。私はlog4j 2、log4j-1.2-api-2.0-rc1.jarによって提供されるlog4j 1.xブリッジを使用しています。単一のlog4j2.xmlを使用して両方を構成することは可能ですか?

私が試した代替手段は、log4jとlog4j2の両方を一緒に構成することです。

-Dlog4j.configurationFile=path/to/log4j2.xml -Dlog4j.configuration=path/to/log4j.xml

私の懸念は、ロギング構成ファイルと出力の断片化です。また、log4j.xmlとlog4j2.xmlの間の競合の可能性についても心配しています。例えばlogfile error.logは、log4j 1でFileAppenderを使用し、log4j 2でRollingFileAppenderを使用するように構成されています。

何かアドバイス?

[注意]

これは私が見ているエラーです:

log4j:WARN No appenders could be found for logger (org.Apache.activemq.util.ThreadPoolUtils).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.Apache.org/log4j/1.2/faq.html#noconfig for more info.

私が使用しているlog4j 2のバージョンはlog4j 2.0 rc1です。

[回答]

Activemq-5.8.0.jarがlog4j 1にバンドルされているようです。解決策は、単にactivemqの前にlog4j 1.xブリッジをロードすることでした。

23
Justin Wong

Log4j2ディストリビューションに含まれているlog4j-1.2アダプターの使用をお勧めします。このように、log4j-1.2 APIにコーディングされたライブラリは、コードを変更せずにlog4j2で動作します。

クラスパスには以下を含める必要があります。

  • log4j-api-2.6.1.jar
  • log4j-core-2.6.1.jar
  • log4j-1.2-api-2.6.1.jar
  • log4j2.xml

クラスパスには以下を含める必要があります:

  • log4j-1.2.x.jar
  • log4j.propertiesまたはlog4j.xml(とにかくこれらはlog4j2によって無視されます)

参照 http://logging.Apache.org/log4j/2.x/faq.html#which_jars

37
Remko Popma

Log4j2を使用するmavenプロジェクトでは、log4j2が引き継げるようにするために、pomでlog4jを使用するモジュールからlog4jを除外することができます。

<dependencies>
    <dependency>
        <groupId>commons-configuration</groupId>
        <artifactId>commons-configuration</artifactId>
        <version>1.4</version>
        <!--force usage of log4j2-->
        <exclusions>
            <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.Apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.3</version>
    </dependency>
    <dependency>
        <groupId>org.Apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.3</version>
    </dependency>
    <dependency>
        <groupId>org.Apache.logging.log4j</groupId>
        <artifactId>log4j-1.2-api</artifactId>
        <version>2.3</version>
    </dependency>
    <dependency>
        <groupId>org.Apache.logging.log4j</groupId>
        <artifactId>log4j-web</artifactId>
        <version>2.3</version>
    </dependency>
</dependencies>

それについての詳細は log4j FAQ にあります

2
OOP