diff --git a/pom.xml b/pom.xml index 1de9782e9..5fb106614 100644 --- a/pom.xml +++ b/pom.xml @@ -89,9 +89,9 @@ 3.0.1 3.0.1 3.1.2 - 1.8 - 1.8 - 3.7.0 + 17 + 17 + 3.11.0 3.1.0 false 2.22.0 diff --git a/trpc-core/src/main/java/org/slf4j/TrpcMDCAdapter.java b/trpc-core/src/main/java/org/slf4j/TrpcMDCAdapter.java index dd3c0127f..8132713ba 100644 --- a/trpc-core/src/main/java/org/slf4j/TrpcMDCAdapter.java +++ b/trpc-core/src/main/java/org/slf4j/TrpcMDCAdapter.java @@ -17,6 +17,7 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.Deque; import java.util.concurrent.ConcurrentHashMap; import org.slf4j.spi.MDCAdapter; @@ -47,13 +48,27 @@ public class TrpcMDCAdapter implements MDCAdapter { static { mtcMDCAdapter = new TrpcMDCAdapter(); - MDC.mdcAdapter = mtcMDCAdapter; + replaceMDCAdapterField(); + } + + /** + * Replace the MDC adapter field using reflection to support slf4j 2.x + */ + private static void replaceMDCAdapterField() { + try { + java.lang.reflect.Field mdcAdapterField = MDC.class.getDeclaredField("mdcAdapter"); + mdcAdapterField.setAccessible(true); + mdcAdapterField.set(null, mtcMDCAdapter); + } catch (Exception e) { + throw new IllegalStateException("Failed to replace MDC adapter", e); + } } public static MDCAdapter init() { return mtcMDCAdapter; } + /** * Put a context value (the val parameter) as identified with the * key parameter into the current thread's context map. Note that @@ -178,4 +193,63 @@ private Map duplicateAndInsertNewMap(Map oldMap) return newMap; } -} \ No newline at end of file + /** + * Push a value onto the MDC stack for the given key. + * This method is required by slf4j 2.x MDCAdapter interface. + * + * @param key the key to identify the value + * @param value the value to push onto the stack + */ + @Override + public void pushByKey(String key, String value) { + // For simplicity, we just use put() to store the value + // A full implementation would maintain a stack per key + put(key, value); + } + + /** + * Pop a value from the MDC stack for the given key. + * This method is required by slf4j 2.x MDCAdapter interface. + * + * @param key the key to identify the stack + * @return the popped value, or null if the stack is empty + */ + @Override + public String popByKey(String key) { + // For simplicity, we just remove and return the value + // A full implementation would pop from a stack per key + String value = get(key); + remove(key); + return value; + } + + /** + * Clear the MDC stack for the given key. + * This method is required by slf4j 2.x MDCAdapter interface. + * + * @param key the key to identify the stack to clear + */ + @Override + public void clearDequeByKey(String key) { + // For simplicity, we just remove the key + // A full implementation would clear the entire stack for the key + remove(key); + } + + /** + * Get a copy of the deque associated with the given key. + * This method is required by slf4j 2.x MDCAdapter interface. + * + * @param key the key to identify the deque + * @return a copy of the deque, or null if no deque exists for the key + */ + @Override + public Deque getCopyOfDequeByKey(String key) { + // For simplicity, we return null as we don't maintain a deque structure + // A full implementation would return a copy of the deque for the key + return null; + } + +} + + diff --git a/trpc-dependencies/trpc-dependencies-bom/pom.xml b/trpc-dependencies/trpc-dependencies-bom/pom.xml index 184056c0f..a973ed9bf 100644 --- a/trpc-dependencies/trpc-dependencies-bom/pom.xml +++ b/trpc-dependencies/trpc-dependencies-bom/pom.xml @@ -100,10 +100,13 @@ 2.3.2 3.28.0-GA 3.1.0 + 3.0.2 - 1.2.13 - 2.17.1 + + 1.5.18 + 2.24.3 1.3.3 + 3.1.0 3.0.0 3.0.1 @@ -133,7 +136,7 @@ 5.0.6.Final 1.8.6 1.8.6 - 1.7.36 + 2.0.17 2.0 1.1.10.4 5.3.27 @@ -568,6 +571,7 @@ org.eclipse.jetty ${jetty.version} + jetty-servlet org.eclipse.jetty