アプリケーションを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ブリッジをロードすることでした。
Log4j2ディストリビューションに含まれているlog4j-1.2アダプターの使用をお勧めします。このように、log4j-1.2 APIにコーディングされたライブラリは、コードを変更せずにlog4j2で動作します。
クラスパスには以下を含める必要があります。
クラスパスには以下を含める必要があります:
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 にあります