Slf4j日志添加用戶id,reqId等信息

通常,項目當(dāng)中會添加各種各樣的日志,為了方便用戶請求流程的跟蹤,需要每條日志上添加用戶id,reqId等信息。但是通過函數(shù)參數(shù)的方式傳遞會比較繁瑣,Slf4j為我們提供了一套簡潔的處理方案。

一、通過添加Filter實例,在http請求到來時解析用戶id和reqId,并將信息保存到Slf4j的MDC中,MDC會將信息保存到當(dāng)前線程的context map當(dāng)中;

//創(chuàng)建過濾器,從http頭中獲取用戶id和reqId等信息

@Order(Ordered.HIGHEST_PRECEDENCE)

public class TraceFilter extends OncePerRequestFilter {

? ? @Override

? ? protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? FilterChain filterChain)throws ServletException, IOException {

? ? try {

? ? ? ? ? ? String uid = request.getHeader("UID");

? ? ? ? ? ? String device = request.getHeader("DEVICE");

? ? ? ? ? ? String reqId = request.getHeader("REQUEST-ID");

? ? ? ? ? ? MDC.put("reqId", reqId);

? ? ? ? ? ? MDC.put("uid", uid);

? ? ? ? ? ? MDC.put("device", device);

? ? ? ? ? ? filterChain.doFilter(request, response);

? ? ? ? } finally {

????????????MDC.clear();

? ? ? ? }

? ? }

}

//將過濾器添加到servlet的過濾器鏈當(dāng)中

@Configuration

public class WebFilterRegistration {

@Bean

? ? public FilterRegistrationBeanregisterFilter() {

FilterRegistrationBean filterRegistrationBean =new FilterRegistrationBean();

? ? ? ? filterRegistrationBean.setFilter(new TraceFilter());

? ? ? ? filterRegistrationBean.addUrlPatterns("/*");

? ? ? ? return filterRegistrationBean;

? ? }

}

二、設(shè)置log4j的日志格式,注意,日志格式里面的名稱與放入MDC中的信息的名稱保持一致

<Console name="LogToConsole" target="SYSTEM_OUT">

? ? ? ? ? ? pattern="%d %p %c{1.} [%t] [traceId: %X{reqId} ] [userId: %X{uid} ] [device: %X{device} ] %m%n"/>

</Console>


三、在需要打印日志的類上添加@Slf4j注解,就可以使用log.info,error和warn打印帶有用戶id和reqId信息的日志了。

@Slf4j

public class LogTest {

public static void main(String[] args) {

MDC.put("uid", "1111");

? ? ? ? MDC.put("reqId", "xxxxx");

? ? ? ? MDC.put("device", "2222222");

? ? ? ? log.info("==========================");

? ? ? ? System.out.println("++++++++++++++++++");

? ? }

}

日志如下:

2020-12-31 17:56:27,817 INFO c.m.s.LogTest [main] [traceId: xxxxx ] [userId: 1111 ] [device: 2222222 ] ==========================

++++++++++++++++++

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容