Class InheritableMDCAdapter
- All Implemented Interfaces:
org.slf4j.spi.MDCAdapter
The standard LogbackMDCAdapter uses plain ThreadLocal, which does not propagate to child threads. This implementation uses InheritableThreadLocal so that virtual threads (and platform threads) spawned from a parent
automatically inherit a copy of the parent's MDC context map.
Use MDCInitializer.initialize() at application startup (before the first log call) to
install this adapter.
Thread safety: Each thread holds its own independent copy of the context map via InheritableThreadLocal. Child threads receive a shallow copy (snapshot) of the parent's map at
creation time; subsequent changes in the parent are not reflected in already-running children,
and vice versa. Individual per-thread maps are not synchronized, which is safe as long as each
map is accessed only by its owning thread — which is the normal MDC usage pattern.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidclear()現在のスレッドのMDCコンテキスト(マップおよびDeque)をすべてクリアする。voidclearDequeByKey(String key) 指定キーのDequeの全要素をクリアする。現在のスレッドのMDCコンテキストから指定キーの値を取得する。現在のスレッドのMDCコンテキストのコピーを返す。指定キーのDequeのコピーを返す。指定キーのDequeスタックから先頭の値をポップして返す。void指定キーのDequeスタックに値をプッシュする。void現在のスレッドのMDCコンテキストにキーと値を設定する。void現在のスレッドのMDCコンテキストから指定キーを削除する。voidsetContextMap(Map<String, String> contextMap) 現在のスレッドのMDCコンテキストを指定されたマップで置き換える。
-
Constructor Details
-
InheritableMDCAdapter
public InheritableMDCAdapter()Constructs a new InheritableMDCAdapter.
-
-
Method Details
-
put
現在のスレッドのMDCコンテキストにキーと値を設定する。このメソッド呼び出し後に起動された子スレッドは、このエントリを自動継承する (
InheritableThreadLocalによる)。ただし、既に起動済みの子スレッドには反映されない。- Specified by:
putin interfaceorg.slf4j.spi.MDCAdapter- Parameters:
key- MDCキー名。nullの場合はIllegalArgumentExceptionをスローval- 設定する値- Throws:
IllegalArgumentException- keyがnullの場合
-
get
現在のスレッドのMDCコンテキストから指定キーの値を取得する。- Specified by:
getin interfaceorg.slf4j.spi.MDCAdapter- Parameters:
key- MDCキー名- Returns:
- 設定されている値。キーが存在しないかkeyがnullの場合はnull
-
remove
現在のスレッドのMDCコンテキストから指定キーを削除する。削除後にコンテキストが空になった場合は
InheritableThreadLocal自体を解放する。 Dequeスタック(pushByKey(java.lang.String, java.lang.String)/popByKey(java.lang.String))には影響しない。 Dequeを含む全エントリのクリアにはclear()を使用すること。- Specified by:
removein interfaceorg.slf4j.spi.MDCAdapter- Parameters:
key- 削除するMDCキー名
-
clear
現在のスレッドのMDCコンテキスト(マップおよびDeque)をすべてクリアする。InheritableThreadLocalのエントリを解放するため、このメソッド呼び出し後に 生成される子スレッドにはコンテキストが継承されない。 なお、既に起動済みの子スレッドが保持するコピーには影響しない。- Specified by:
clearin interfaceorg.slf4j.spi.MDCAdapter
-
getCopyOfContextMap
現在のスレッドのMDCコンテキストのコピーを返す。返されたマップはスナップショットであり、以降の変更は反映されない。
- Specified by:
getCopyOfContextMapin interfaceorg.slf4j.spi.MDCAdapter- Returns:
- MDCコンテキストのコピー。コンテキストが未設定の場合はnull
-
setContextMap
現在のスレッドのMDCコンテキストを指定されたマップで置き換える。nullを渡すとコンテキストをクリアする。子スレッドへの継承も更新後の内容になる。
- Specified by:
setContextMapin interfaceorg.slf4j.spi.MDCAdapter- Parameters:
contextMap- 新しいMDCコンテキスト。nullの場合はクリア
-
pushByKey
指定キーのDequeスタックに値をプッシュする。keyがnullの場合は何もしない。
- Specified by:
pushByKeyin interfaceorg.slf4j.spi.MDCAdapter- Parameters:
key- Dequeのキー名value- プッシュする値
-
popByKey
指定キーのDequeスタックから先頭の値をポップして返す。keyがnullまたはDequeが存在しない場合はnullを返す。
- Specified by:
popByKeyin interfaceorg.slf4j.spi.MDCAdapter- Parameters:
key- Dequeのキー名- Returns:
- ポップした値。キーが存在しないかkeyがnullの場合はnull
-
getCopyOfDequeByKey
指定キーのDequeのコピーを返す。返されたDequeはスナップショットであり、以降の変更は反映されない。
- Specified by:
getCopyOfDequeByKeyin interfaceorg.slf4j.spi.MDCAdapter- Parameters:
key- Dequeのキー名- Returns:
- Dequeのコピー。キーが存在しない場合はnull
-
clearDequeByKey
指定キーのDequeの全要素をクリアする。keyがnullまたはDequeが存在しない場合は何もしない。
- Specified by:
clearDequeByKeyin interfaceorg.slf4j.spi.MDCAdapter- Parameters:
key- クリアするDequeのキー名
-