1. 概要 

このチュートリアルでは、Log4j2ライブラリを使用してスレッド情報をログに記録するアイデアと例を示します。 

2. ロギングとスレッド

ログは、エラーまたはフローが発生したときにシステムで何が起こっていたかについてのコンテキストを提供する強力なツールです。 ロギングは、いつでも分析できる関連情報を取得して保持するのに役立ちます。

スレッドを使用すると、アプリケーションで複数の処理を同時に実行して、より多くのリクエストを処理し、ジョブをより効率的にすることができます。

多くのJavaアプリケーションは、ロギングとスレッドを使用して、このシナリオでプロセスを制御します。 ただし、ログは通常特定のファイルに集中しているため、ログはさまざまなスレッドから混乱し、ユーザーはイベントのシーケンスを識別して理解することができません。 最も人気のあるJavaロギングフレームワークの1つであるLog4j2を使用して、この問題を解決するためのスレッドに関する関連情報を表示します。

3. Log4j2の使用法

次に、Log4j2のいくつかのパラメーターを使用して、スレッドに関する情報を表示する例を示します。

<Property name="LOG_PATTERN"> %d{yyyy-MM-dd HH:mm:ss.SSS} --- thread_id="%tid" thread_name="%tn" thread_priority="%tp" --- [%p] %m%n </Property>

Log4j2は、パターン内のパラメーターを使用してデータを参照します。 すべてのパラメーターは、初心者ので始まります。 スレッドパラメータの例を次に示します。

  • tid :スレッド識別子は、スレッドの作成時に生成される正の長い数値です。
  • tn :スレッドに名前を付ける文字のシーケンスです。
  • tp :スレッドの優先度は1から10までの整数で、有効数字が大きいほど優先度が高くなります。

まず、が示唆しているように、スレッドのID、名前、優先度に関する情報を追加します。 したがって、それを視覚化するには、新しいスレッドを作成し、いくつかの情報をログに記録する単純なアプリケーションを作成する必要があります。

public class Log4j2ThreadInfo{
    private static final Logger logger = LogManager.getLogger(Log4j2ThreadInfo.class);
    
    public static void main(String[] args) {
        IntStream.range(0, 5).forEach(i -> {
            Runnable runnable = () -> logger.info("Logging info");
            Thread thread = new Thread(runnable);
            thread.start();
        });
    }
}

つまり、 Java Streams を使用して0〜5の範囲でforEachを実行し、ログを記録して新しいスレッドを開始するだけです。 その結果、次のようになります。

2022-01-14 23:44:56.893 --- thread_id="22" thread_name="Thread-2" thread_priority="5" --- [INFO] Logging info
2022-01-14 23:44:56.893 --- thread_id="21" thread_name="Thread-1" thread_priority="5" --- [INFO] Logging info
2022-01-14 23:44:56.893 --- thread_id="20" thread_name="Thread-0" thread_priority="5" --- [INFO] Logging info
2022-01-14 23:44:56.893 --- thread_id="24" thread_name="Thread-4" thread_priority="5" --- [INFO] Logging info
2022-01-14 23:44:56.893 --- thread_id="23" thread_name="Thread-3" thread_priority="5" --- [INFO] Logging info

4. 結論

この記事では、Log4j2パラメータを使用してJavaプロジェクトにスレッド情報を追加する簡単な方法を示します。 コードを確認したい場合は、GitHubから入手できます。