Package com.streamconverter.logging
Class ExecutionContextTurboFilter
java.lang.Object
ch.qos.logback.core.spi.ContextAwareBase
ch.qos.logback.classic.turbo.TurboFilter
com.streamconverter.logging.ExecutionContextTurboFilter
- All Implemented Interfaces:
ch.qos.logback.core.spi.ContextAware,ch.qos.logback.core.spi.LifeCycle
ExecutionContextからMDCに値を自動設定するLogback TurboFilter
このフィルターは、ログ出力の都度ExecutionContextHolderから値を取得し、 MDCに自動的に設定します。これにより、アプリケーションコードは MDC同期を意識する必要がありません。
設定例(logback.xml):
<configuration>
<turboFilter class="com.streamconverter.logging.ExecutionContextTurboFilter"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [userId:%X{userId}] - %msg%n</pattern>
</encoder>
</appender>
</configuration>
動作:
- ログ出力の都度、このフィルターのdecide()メソッドが呼ばれる
- ExecutionContextHolderから現在のExecutionContextを取得
- 共有コンテキストの全キーについて、MDCと比較して変更がある場合のみ更新
- 削除されたキーはMDCからも削除
パフォーマンス最適化:
- MDCの値と比較して、変更がある場合のみMDC.put()を呼ぶ
- 前回同期したキーをThreadLocalで追跡し、削除されたキーをクリーンアップ
- 任意の数の共有コンテキストキーに対応
スレッドセーフ性: ThreadLocalを使用しているため、スレッドごとに独立したMDC値が設定されます。
-
Field Summary
Fields inherited from class ch.qos.logback.core.spi.ContextAwareBase
context -
Constructor Summary
Constructors -
Method Summary
Methods inherited from class ch.qos.logback.classic.turbo.TurboFilter
decide, getName, isStarted, setName, start, stopMethods inherited from class ch.qos.logback.core.spi.ContextAwareBase
addError, addError, addInfo, addInfo, addStatus, addWarn, addWarn, getContext, getDeclaredOrigin, getStatusManager, setContext
-
Constructor Details
-
ExecutionContextTurboFilter
public ExecutionContextTurboFilter()
-
-
Method Details
-
decide
public ch.qos.logback.core.spi.FilterReply decide(org.slf4j.Marker marker, ch.qos.logback.classic.Logger logger, ch.qos.logback.classic.Level level, String format, Object[] params, Throwable t) ログイベント処理時に呼ばれ、ExecutionContextの共有コンテキストをMDCに同期します共有コンテキストの全キーについて、現在のMDC値と比較し、変更がある場合のみ更新します。 前回存在していたが今回削除されたキーは、MDCからも削除されます。
- Specified by:
decidein classch.qos.logback.classic.turbo.TurboFilter- Parameters:
marker- マーカーlogger- ロガーlevel- ログレベルformat- メッセージフォーマットparams- パラメータt- 例外- Returns:
- FilterReply.NEUTRAL(フィルタリングは行わず、常にログを通過させる)
-