log4jの「ThreadContext」の代替

user16655

私はlog4j2を使用するプロジェクトに取り組んでおり、このプロジェクトではThreadContextを使用しています。これでlog4j(1)の操作に戻りましたが、ThreadContextは提供されていません。ThreadContextで使用できる良い代替手段はありますか?グーグル検索はまだ私の良いアイデアを与えていないので、ここの誰かが何らかのインプットを持っていることを願っています。

そして

MDC(マップされた診断コンテキスト)を直接使用できます。詳細については、こちらをご覧ください。使用方法については、このも参照してください

基本的に、以下を使用して属性を設定します。

MDC.put("userName", "test");

そして、ロガーに次のような情報を記録できます。

#note the %X{userName} - this is how you fetch data from Mapped Diagnostic Context (MDC)
log4j.appender.consoleAppender.layout.ConversionPattern = %-4r [%t] %5p %c %x - %m - user: %X{userName}%n

または、xml configを使用している場合は、次のように、そのユーザー用のフィルターを使用して別のアペンダーを構成できます。

<appender name="Test" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="my.log" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                   value="[%d{HH:mm:ss.SSS}] %-8p [%-5t] %C{2}:%-12M - %m%n user: %X{userName}" />
        </layout>
        <filter class="org.apache.log4j.varia.StringMatchFilter">
                  <param name="StringToMatch" value=" user: test " />
                  <param name="AcceptOnMatch" value="true" />
          </filter>
    <filter class="org.apache.log4j.varia.DenyAllFilter"/>
    </appender>

次に、そのアペンダーに対してのみロガーを有効にします。

<logger name="com.example.Clazz" additivity="false">
    <level value="info" />
    <appender-ref ref="Test"/>
</logger>

このようにして、ユーザーにのみ関連するログを表示できますtest

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事