package vnet.sms.common.executor.thread; import java.util.HashMap; import java.util.Map; import org.slf4j.MDC; final class MessageDiagnosticContextPopulatingThread extends Thread { private final Map<String, String> mdcParameters = new HashMap<String, String>(); MessageDiagnosticContextPopulatingThread(final ThreadGroup threadGroup, final Runnable runnable, final String threadName, final Map<String, String> mdcParameters) { super(threadGroup, runnable, threadName); this.mdcParameters.putAll(mdcParameters); } /** * @see java.lang.Thread#run() */ @Override public void run() { try { for (final Map.Entry<String, String> mdcParam : this.mdcParameters .entrySet()) { MDC.put(mdcParam.getKey(), mdcParam.getValue()); } super.run(); } finally { for (final String mdcKey : this.mdcParameters.keySet()) { MDC.remove(mdcKey); } } } }