0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JBossEAP上のアプリケーションでlog4jからlog4j2にバージョンアップ

Posted at

はじめに

JBoss EAP 7.4上のWebアプリケーションをlog4jからlog4j2にバージョンアップした。

環境

  • java11
  • Windows 11
  • JBoss EAP 7.4.0
  • TERASOLUNA Server Framework for Java 5.7.3.RELEASE (5.5からバージョンアップ)
  • log4j 2.20.0 (1.2.17からのバージョンアップ)

mavenでビルドしている。

やったこと

loggerの変更

log4j2を使用するにあたり、loggerをLogManagerから取得するよう変更しました。

importするライブラリの変更

// import org.apache.log4j.Logger;
// ↓
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

コード変更

//private static Logger logger = Logger.getLogger
// ↓
private static Logger logger = LogManager.getLogger

NDC(Nested Diagnostic Context)からThreadContextへの変更

log4j2にはNDCではなくThreadContextを使用するとのこと。

importするライブラリの変更

// import org.apache.log4j.NDC;
// ↓
import org.apache.logging.log4j.ThreadContext;

コード変更

//		NDC.remove();
//		NDC.push(xx);
// ↓
		ThreadContext.clearAll();
		ThreadContext.push(xx);

問題

JBoss起動時に"java.lang.NoSuchFieldError: EMPTY_BYTE_ARRAY"のエラーが発生。(ログ抜粋)

$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
	at org.jboss.threads@2.4.0.Final-redhat-00001//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
	at java.base/java.lang.Thread.run(Thread.java:834)
	at org.jboss.threads@2.4.0.Final-redhat-00001//org.jboss.threads.JBossThread.run(JBossThread.java:513)
Caused by: java.lang.NoSuchFieldError: EMPTY_BYTE_ARRAY

対応

log4j2のコアライブラリ(アプリ側)とAPIライブラリ(JBoss側)のバージョンが一致していないとのことで、jboss-deployment-structure.xmlを作成してJBossのlog4jAPIをアプリケーションから使用できないようにした。

<jboss-deployment-structure>
  <deployment>
    <exclusions>
      <module name="org.apache.logging.log4j.api"/>
    </exclusions>
  </deployment>
</jboss-deployment-structure>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?