摘要:介紹中包含的可以被同一線程中執(zhí)行的代碼所訪問內(nèi)容。當(dāng)前線程的子線程會繼承其父線程中的的內(nèi)容。記錄日志時,只需要從中獲取所需的信息即可。作用使用來記錄日志,可以規(guī)范多開發(fā)下日志格式。
介紹:
MDC 中包含的可以被同一線程中執(zhí)行的代碼所訪問內(nèi)容。當(dāng)前線程的子線程會繼承其父線程中的 MDC 的內(nèi)容。記錄日志時,只需要從 MDC 中獲取所需的信息即可。
作用:
使用MDC來記錄日志,可以規(guī)范多開發(fā)下日志格式。
一:新建線程處理類 ThreadContext
import java.io.Serializable; import java.util.HashMap; import java.util.Map; import java.util.Optional; /** * 線程上下文 * * @date 2017年3月1日 * @since 1.0.0 */ public class ThreadContext { /** * 線程上下文變量的持有者 */ private final static ThreadLocal
二:添加工具類TraceUtil
import java.util.UUID; import org.slf4j.MDC; import ThreadContext; /** * trace工具 * * @date 2017年3月10日 * @since 1.0.0 */ public class TraceUtil { public static void traceStart() { ThreadContext.init(); String traceId = generateTraceId(); MDC.put("traceId", traceId); ThreadContext.putTraceId(traceId); } public static void traceEnd() { MDC.clear(); ThreadContext.clean(); } /** * 生成跟蹤ID * * @return */ private static String generateTraceId() { return UUID.randomUUID().toString(); } }
三:添加ContextFilter,對于每個請求隨機生成RequestID并放入MDC
import java.io.IOException; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.web.filter.OncePerRequestFilter; import com.pingan.manpan.common.util.TraceUtil; import com.pingan.manpan.user.dto.ThreadContext; import com.pingan.manpan.web.common.surpport.IpUtils; /** * 上下文Filter * * @date 2017/3/10 * @since 1.0.0 */ //@Order 標記組件的加載順序 @Order(Ordered.HIGHEST_PRECEDENCE) public class ContextFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { try { ThreadContext.putClientIp(IpUtils.getClientIp(request)); TraceUtil.traceStart(); filterChain.doFilter(request, response); } finally { TraceUtil.traceEnd(); } } }
四:在webConfiguriation注冊filter
/** * 請求上下文,應(yīng)該在最外層 * * @return */ @Bean public FilterRegistrationBean requestContextRepositoryFilterRegistrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(new ContextFilter()); filterRegistrationBean.addUrlPatterns("/*"); return filterRegistrationBean; }
五:修改log4j日志配置文件,設(shè)置日志traceId
${FILE_LOG_PATTERN} ${LOG_FILE}${LOG_FILE_SUFFIX} ${LOG_FILE}.%d{yyyy-MM-dd}${LOG_FILE_SUFFIX} 127.0.0.1 local6 514 ${FILE_LOG_PATTERN}
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/68984.html
摘要:當(dāng)前線程的子線程會繼承其父線程中的的內(nèi)容。若希望在線程池與主線程間傳遞,需配合和使用。 一、背景 開發(fā)排查系統(tǒng)問題用得最多的手段就是查看系統(tǒng)日志,在分布式環(huán)境中一般使用ELK來統(tǒng)一收集日志,但是在并發(fā)大時使用日志定位問題還是比較麻煩,由于大量的其他用戶/其他線程的日志也一起輸出穿行其中導(dǎo)致很難篩選出指定請求的全部相關(guān)日志,以及下游線程/服務(wù)對應(yīng)的日志。 ? 二、解決思路 每個請求都使...
摘要:為了追蹤一個請求完整的流轉(zhuǎn)過程,我可以給請求分配一個唯一的,當(dāng)請求調(diào)用其他服務(wù)時,我們傳遞這個。這是一個簡單的實現(xiàn)分布式調(diào)用追蹤的實踐,以上。 背景 分布式環(huán)境下,跨服務(wù)之間的調(diào)用錯綜復(fù)雜,如果突然爆出一個錯誤,雖然有日志記錄,但到底是哪個服務(wù)出了問題呢?是移動端傳的參數(shù)有錯誤,還是系統(tǒng)X或者系統(tǒng)Y提供的接口導(dǎo)致?在這種情況下,錯誤排查起來就非常費勁。 為了追蹤一個請求完整的流轉(zhuǎn)過程,...
摘要:默認情況下,如果使用,則使用進行日志記錄,還包括適當(dāng)?shù)穆酚?,以確保使用或的依賴庫都能正確工作。分隔符,用于區(qū)分實際日志消息的開始。 26. 日志記錄 Spring Boot為所有內(nèi)部日志記錄使用Commons Logging,但開放底層日志實現(xiàn),提供了Java Util Logging、Log4J2和Logback的默認配置,在每種情況下,日志記錄器都被預(yù)先配置為使用控制臺輸出,可選的...
摘要:介紹從版本開始,使用作為追蹤庫,為方便起見,在此處嵌入了的部分文檔。具有一個上下文,其中包含標識符,該標識符將放置在表示分布式操作的樹中的正確位置。追蹤通常由攔截器自動完成,在幕后,他們添加與他們在操作中的角色相關(guān)的標簽和事件。 Spring Cloud Sleuth特性 將trace和span ID添加到Slf4J MDC,因此你可以在日志聚合器中從給定的trace或span提取...
摘要:底層是一個的散列表可擴容的數(shù)組,并采用開放地址法來解決沖突。稍后討論方法每個對象都有一個值,每初始化一個對象,值就增加一個固定的大小。因此在使用的時候要手動調(diào)用方法,防止內(nèi)存泄漏。 ThreadLocal定義 先看JDK關(guān)于ThreadLocal的類注釋: This class provides thread-local variables. These variables diffe...
閱讀 2650·2021-10-12 10:12
閱讀 791·2019-08-29 17:25
閱讀 2794·2019-08-29 17:24
閱讀 3228·2019-08-29 17:19
閱讀 1810·2019-08-29 15:39
閱讀 3057·2019-08-26 16:50
閱讀 2003·2019-08-26 12:17
閱讀 2708·2019-08-26 12:16