diff --git a/src/main/java/com/eactive/eai/adapter/http/dynamic/HttpAdapterServiceSupport.java b/src/main/java/com/eactive/eai/adapter/http/dynamic/HttpAdapterServiceSupport.java index 1f9c566..794a0b6 100644 --- a/src/main/java/com/eactive/eai/adapter/http/dynamic/HttpAdapterServiceSupport.java +++ b/src/main/java/com/eactive/eai/adapter/http/dynamic/HttpAdapterServiceSupport.java @@ -19,6 +19,7 @@ import com.eactive.eai.adapter.http.dynamic.filter.HttpAdapterFilterType; import com.eactive.eai.adapter.http.dynamic.filter.JwtAuthException; import com.eactive.eai.common.TransactionContextKeys; import com.eactive.eai.common.util.Logger; +import com.eactive.eai.common.util.TxSiftContext; import com.eactive.eai.common.util.UUIDGenerator; public abstract class HttpAdapterServiceSupport implements HttpAdapterService, HttpAdapterServiceKey { @@ -37,10 +38,7 @@ public abstract class HttpAdapterServiceSupport implements HttpAdapterService, H prop.setProperty(TransactionContextKeys.TRANSACTION_UUID, uuid); } - if(MDC.get(Logger.DISCRIMINATOR) == null) { - MDC.put(Logger.DISCRIMINATOR, uuid); - bMDCput = true; - } + bMDCput = TxSiftContext.begin(uuid); try { String transactionId = request.getHeader(HttpClientAdapterServiceKey.TRANSACTION_ID); @@ -93,7 +91,7 @@ public abstract class HttpAdapterServiceSupport implements HttpAdapterService, H } } finally { if(bMDCput) - MDC.remove(Logger.DISCRIMINATOR); + TxSiftContext.end(); } } diff --git a/src/main/java/com/eactive/eai/common/util/TxSiftContext.java b/src/main/java/com/eactive/eai/common/util/TxSiftContext.java new file mode 100644 index 0000000..65af989 --- /dev/null +++ b/src/main/java/com/eactive/eai/common/util/TxSiftContext.java @@ -0,0 +1,31 @@ +package com.eactive.eai.common.util; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.MDC; + +public class TxSiftContext { + + /** + * 거래 시작 시 SIFT discriminator를 MDC에 등록한다. + * SIFT가 비활성화 상태이면 아무 작업도 하지 않는다. + */ + public static boolean begin(String discriminatingValue) { + if (!Logger.isSiftEnabled()) return false; + if(MDC.get(Logger.DISCRIMINATOR) == null) { + MDC.put(Logger.DISCRIMINATOR, discriminatingValue); + return true; + } + return false; + } + + /** + * 거래 종료 시 MDC에 등록된 SIFT appender를 닫고 MDC를 정리한다. + * begin() 에서 MDC가 설정되지 않았으면 아무 작업도 하지 않는다. + */ + public static void end() { + String discriminatingValue = MDC.get(Logger.DISCRIMINATOR); + if (StringUtils.isBlank(discriminatingValue)) return; + Logger.closeSiftAppender(discriminatingValue); + MDC.remove(Logger.DISCRIMINATOR); + } +}