精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

生產環境定位日志太麻煩怎么辦?建議了解一下日志框架的MDC功能

開發 前端
MDC是日志門面框架SLF4J提供的一個類,可以提供在多線程情況下記錄日志的功能,log4j、logback、log4j2都有對這個類的實現。

對于每一個開發者來說,查詢接口的執行日志都是一個高頻率的操作,每當測試說接口有問題時,我們都需要去服務器或者日志系統上查報錯的原因。
一般情況下,我們會通過對應的關鍵字或者接口地址去查詢這個接口到底報了什么錯,但是這帶來一個問題,就是我們可能少打日志或者忘打某些關鍵字的日志,導致查詢記錄比較麻煩。

那么有沒有一種簡單高效的方法,即使我們在日志中不打印任何關鍵字,系統會自動生成一個關鍵字,讓我們一次性查詢出這個接口的所有log記錄呢?

MDC

MDC是日志門面框架SLF4J提供的一個類,可以提供在多線程情況下記錄日志的功能,log4j、logback、log4j2都有對這個類的實現。

從本質上來說,MDC可以看做一個ThreadLocal,由于其線程安全的特性,可以讓我們輕松安全的保存數據。

MDC主要的API有clear()、get()、put()、remove()方法等,簡潔的api讓我們使用上手基本沒有難度。

如何使用

1、修改日志打印格式

以日志框架logback為例,在logback.xml中,找到日志打印規則的配置,添加-%X{reqId}屬性,其中reqId可以任意指定,你寫其他的屬性也可以,博主這里演示指定為reqId。

<encoder>
<pattern>-%X{reqId} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %file:%line %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>

2、添加過濾器MDCFilter

ps.使用攔截器也可以,效果是一樣的。對每個接口做攔截。

@Component
@AllArgsConstructor
@Order(Ordered.HIGHEST_PRECEDENCE)
@Slf4j
public class MDCFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain){
try {
//給每個請求接口生成一個requestId
String requestId = RandomUtil.randomNumbers(10);
//這里的reqId就是上面配置的,要保持一致
MDC.put("reqId", "reqId:" + requestId);
chain.doFilter(request, response);
} finally {
MDC.clear();
}
}

@Override
public void destroy(){
}
}

經過簡單的兩步就配置好了,下面我們看一下效果。

@PostMapping(value = "/mdcTest")
public ResponseEntity<Object> mdcTest(String id, String name) {
log.info("測試日志打印,id={},name={}", id, name);
log.info("測試日志打印1");
log.info("測試日志打印2");
log.info("測試日志打印3");
log.info("測試日志打印4");
return ResponseEntity.ok().build();
}


每一行日志都有一個關鍵字reqId:9723829830,這樣我們查詢日志時只需要查詢關鍵字9723829830就可以直接查出來這個接口所有的執行記錄了。

如果想更方便的話,也可以把這個關鍵字直接輸出到每一個接口的響應頭或者響應體中。

進階使用

對于普通的web應用我們可以直接攔截每個接口,自動生成一個請求id,那么對于微服務項目,一個接口可能會產生很多服務的調用,那如何一次性查出來所有系統內的日志呢?

對于日志的搜集本文暫不考慮,咱們先說如何做請求id的傳遞。

其實也很簡單,當我們有多個系統間的調用時,把reqId放到request的header中進行傳遞,然后下游系統獲取這個id就可以了。

比如下方的攔截器:

public class LogInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//如果有上層調用就從header中取出上層的ID
String traceId = request.getHeader("reqId");
if (traceId == null) {
//如果沒有,就生成一個默認的
traceId = RandomUtil.randomNumbers(10);
}
MDC.put("reqId", traceId);
return true;
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception {
}

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
//調用結束后刪除
MDC.remove("reqId");
}
}

MDC存在的一些問題

我們在上文說過,MDC的本質是ThreadLocal,它會把數據都綁定到當前線程上。但是當我們使用多線程的時候,就會帶來一個數據丟失的問題。

所以,我們需要進行線程間的數據傳遞,保證MDC數據不丟失。

以線程池傳遞數據為例,ThreadPoolTaskExecutor提供了一個taskDecorator裝飾器,通過這個屬性,我們就可以實現屬性的傳遞。

首先,定義一個MDCContextDecorator。

public class MDCContextDecorator implements TaskDecorator {

@Override
public Runnable decorate(Runnable runnable){
Map<String,String> previous = MDC.getCopyOfContextMap();
return () -> {
try {
if (previous != null) {
MDC.setContextMap(previous);
}
runnable.run();
} finally {
MDC.clear();
}
};
}
}

然后設置線程池的taskDecorator屬性。

public ThreadPoolTaskExecutor executor(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(20);
//...其他屬性
//設置線程屬性的自動傳遞
executor.setTaskDecorator(new MDCContextDecorator());
return executor;
}

最后

MDC的使用其實很簡單,對于我們查詢日志也很有幫助,應用也算是非常廣泛了。有興趣的同學也可以去看一下它的內部實現,代碼也并不復雜。

責任編輯:姜華 來源: 今日頭條
相關推薦

2018-12-26 18:05:28

華為云

2020-12-22 09:17:49

日志Loki服務

2023-08-21 11:24:43

AndroidCSS

2020-02-10 14:26:10

GitHub代碼倉庫

2010-02-26 13:14:39

Java日志系統

2025-02-26 08:26:38

2024-09-19 09:30:39

緩存框架抽象

2020-11-17 06:42:21

MySQL數據庫開源

2020-12-10 08:44:35

WebSocket輪詢Comet

2022-03-24 13:36:18

Java悲觀鎖樂觀鎖

2025-09-17 07:19:50

2023-01-11 08:09:25

Springboot修改日志級別

2020-03-01 17:53:38

Excel大數據微軟

2021-04-27 07:52:18

SQLNULLOR

2021-06-29 21:36:21

微服務Nacos日志

2019-12-02 10:16:45

Linux 開源操作系統

2023-04-23 14:55:10

開發TypeScript裝飾器

2015-08-26 11:00:42

機房環境

2022-04-22 10:30:07

框架JavaScript前端

2019-02-20 14:16:43

點贊
收藏

51CTO技術棧公眾號

久久久久久久久电影| 日韩一区二区三区在线视频| 先锋影音亚洲资源| 国产麻豆精品一区| 国产精品日本欧美一区二区三区| 亚洲女人被黑人巨大进入al| www.成人黄色| 中国字幕a在线看韩国电影| 欧美激情一区二区三区四区| 成人精品一二区| 波多野结衣视频网站| 亚洲色图88| 国产一区二区欧美日韩| 伊人av在线播放| 国产 日韩 欧美一区| 亚洲精品大片www| 色之综合天天综合色天天棕色| 亚洲大尺度视频| 日本中文一区二区三区| 牛牛精品一区二区| 色一情一乱一伦| 蜜桃a∨噜噜一区二区三区| 欧美三级在线播放| 国产av麻豆mag剧集| 久久99精品久久| 久久久久久亚洲综合影院红桃| 亚洲精品日韩激情在线电影| 色老头在线视频| 伊人久久亚洲热| 欧美成人h版在线观看| 五月激情四射婷婷| 你懂的一区二区三区| 亚洲国产精品网站| 年下总裁被打光屁股sp| 欧美大片91| 制服丝袜av成人在线看| 在线观看国产中文字幕| 日本精品不卡| 色诱亚洲精品久久久久久| 99在线精品免费视频| 欧美人与动牲性行为| 亚洲精品视频在线观看网站| 美国av在线播放| 免费在线观看av| 国产精品色在线| 视频一区二区三区免费观看| 国产精品四虎| 国产精品免费人成网站| 这里只有精品66| 国产成人无吗| 国产精品理论片| 亚洲欧洲日韩综合二区| 日本电影在线观看网站| 国产精品久久久久一区| 视频一区二区视频| 尤物在线网址| 亚洲高清在线视频| 缅甸午夜性猛交xxxx| 男人久久天堂| 欧洲视频一区二区| 亚洲精品久久久中文字幕| 国产原创一区| 日韩无一区二区| 欧美极品jizzhd欧美仙踪林| 猫咪成人在线观看| 亚洲免费一级电影| jizz中文字幕| 99精品视频精品精品视频| 欧美成年人视频网站| 久久网一区二区| 一区二区激情| 国产精品男人爽免费视频1| 96亚洲精品久久久蜜桃| 国产成人av电影在线| 精品视频导航| h视频在线播放| 亚洲男人的天堂一区二区| 亚洲乱码日产精品bd在线观看| 96av在线| 欧美亚洲国产一区二区三区va | 日韩福利视频| 国产网站在线免费观看| 亚洲午夜久久久| 国产欧美高清在线| 日韩一级特黄| 亚洲精品大尺度| 亚洲精品国产精品乱码在线观看| 中文精品电影| 日本精品久久久久影院| 国产内射老熟女aaaa∵| 91视视频在线观看入口直接观看www| 日本一区视频在线播放| 亚洲男同gay网站| 日本韩国欧美在线| 少妇愉情理伦片bd| 国产精品免费大片| 欧美大片网站在线观看| www.久久视频| 成人午夜在线免费| 一本久久a久久精品vr综合| 国精一区二区三区| 欧美日韩午夜精品| 国产精品300页| 亚洲综合激情在线| 国产精品99导航| 亚洲精品久久久久avwww潮水| 久久久www成人免费无遮挡大片| 可以免费看的黄色网址| 亚洲成人av观看| 欧美精品一区二区高清在线观看| 国产无遮挡在线观看| 在线亚洲国产精品网站| 91视频婷婷| 日本视频在线免费观看| 欧美午夜精品伦理| 岛国精品一区二区三区| 久久精品青草| 国产精品一区二区久久久久| 色哟哟在线观看| 亚洲一区二区精品视频| 日本成人xxx| 成人黄色小视频| 日韩美女视频中文字幕| 天堂在线观看视频| 亚洲高清免费一级二级三级| 91热视频在线观看| 欧美残忍xxxx极端| 国产精品亚洲精品| 成人在线免费观看| 一本久道中文字幕精品亚洲嫩| 精品人妻一区二区三| 国产精品99久久久久久动医院| 国产成人在线视频| 色网站在线免费观看| 大伊人狠狠躁夜夜躁av一区| 深田咏美中文字幕| 精品91在线| 91九色露脸| 在线不卡日本v二区707| 日韩欧美一级特黄在线播放| 粉嫩av性色av蜜臀av网站| 久久97超碰色| 色乱码一区二区三区熟女| 91麻豆精品国产综合久久久 | 国产在线精品不卡| 日本女人高潮视频| 国模大尺度视频一区二区| 久久精品亚洲热| 国产欧美一区二区三区视频在线观看| 国产精品二三区| 又色又爽又黄视频| 欧美+亚洲+精品+三区| 波多野结衣成人在线| 欧美xxxx免费虐| 亚洲国产精品字幕| 波多野结衣 久久| 日本一区二区成人在线| 亚洲欧美在线精品| 夜间精品视频| 国产精品区一区| 小早川怜子影音先锋在线观看| 日韩精品视频在线免费观看| 久久精品无码av| 中文字幕精品—区二区四季| 特黄视频免费观看| 狠狠久久婷婷| 鲁鲁视频www一区二区| 姬川优奈av一区二区在线电影| 夜夜嗨av一区二区三区四区| 91九色蝌蚪91por成人| 一区二区久久久久久| 最近日本中文字幕| 蜜臀av国产精品久久久久| 青青草免费在线视频观看| 精品久久97| 国产精品久久久久久久久免费 | 欧美—级高清免费播放| 五月婷婷伊人网| 精品视频一区二区不卡| 五月婷婷一区二区| 久久久99久久| 亚洲av综合色区无码另类小说| 中文一区在线| 中文字幕精品一区日韩| 九色丨蝌蚪丨成人| 国产精品一区二区三区成人| 免费在线国产视频| 尤物tv国产一区| 亚洲经典一区二区| 欧美亚州韩日在线看免费版国语版| 日本精品在线免费观看| 91影院在线免费观看| 亚洲精品手机在线观看| 亚洲精品孕妇| 中文字幕av导航| 色婷婷狠狠五月综合天色拍| 成人在线国产精品| 毛片免费看不卡网站| 美女av一区二区| 二区在线视频| 日韩不卡在线观看| 精品乱子伦一区二区| 欧洲精品在线观看| 日本中文字幕免费观看| 综合久久久久综合| 亚洲AV无码国产成人久久| 国产精品911| 一区二区三区视频在线观看免费| 亚洲激情社区| 久久观看最新视频| 成人羞羞网站入口| 欧美极品色图| 国产精品白浆| 91观看网站| 国产精品xnxxcom| 国产精品久久久久福利| 日韩欧美精品一区二区三区| 久久99久国产精品黄毛片入口| 91在线视频免费看| 亚洲天堂av图片| 亚洲日本在线播放| 精品99久久久久久| 亚洲AV午夜精品| 4438x成人网最大色成网站| 波多野结衣毛片| 色婷婷亚洲综合| 毛片毛片女人毛片毛片| 午夜精品久久久久久不卡8050| 全网免费在线播放视频入口| 一区二区中文视频| 污污视频网站在线免费观看| 日本一区二区三区在线不卡 | 成人h动漫精品一区二区无码 | 亚洲人视频在线| 日av在线不卡| 国内自拍视频一区| 日韩avvvv在线播放| 午夜精品在线免费观看| 日韩综合一区二区| 性欧美极品xxxx欧美一区二区| 久久精品官网| 成年人网站大全| 人人爽香蕉精品| 老司机午夜性大片| 国产乱对白刺激视频不卡| 无人码人妻一区二区三区免费| 国产精品一卡二卡在线观看| 91香蕉视频免费看| 国产精品911| 国产真实乱人偷精品| 91蝌蚪porny| 亚洲无人区码一码二码三码的含义| 久久精品视频在线看| 国产探花视频在线播放| 日韩理论片网站| 久久久久亚洲av无码专区 | 国产一区二区视频免费| 欧美性一二三区| 国产乱叫456在线| 欧美videos中文字幕| 婷婷在线免费视频| 亚洲人成网站色ww在线| 91精彩视频在线播放| 久热精品视频在线观看一区| 免费在线看污片| 欧美专区在线观看| 久久天天久久| 成人在线视频网址| 亚洲丁香日韩| 一区二区视频在线观看| 欧美人成在线| 18岁网站在线观看| 麻豆精品久久精品色综合| 亚洲制服在线观看| 99热在这里有精品免费| 少妇av片在线观看| 一区二区在线观看av| 九九热在线免费观看| 欧美日韩激情一区二区三区| 性生活黄色大片| 亚洲人成77777在线观看网| 黄色av电影在线播放| 久久久久久久久久久亚洲| 自由日本语热亚洲人| 91亚洲国产成人久久精品网站| 另类在线视频| 中文字幕中文字幕在线中心一区| 国内精品福利| 在线视频日韩一区| 国产精品亚洲自拍| 免费高清完整在线观看| 欧美激情国产日韩精品一区18| а√天堂中文在线资源8| 国产精品美女久久| 国产美女撒尿一区二区| 五月天国产一区| 亚洲高清网站| 日韩不卡的av| 国产欧美精品国产国产专区| 久久精品一区二区三| 欧美视频一区在线| 亚洲色偷精品一区二区三区| 操日韩av在线电影| 国模一区二区| 精品欧美一区二区精品久久| 午夜精品亚洲| 亚洲国产成人va在线观看麻豆| 99国产精品久久久久久久久久久| 天堂а√在线中文在线鲁大师| 欧美日韩亚洲高清| 高潮一区二区三区乱码| 久久久999精品视频| 蜜桃视频成人m3u8| 欧美精品v日韩精品v国产精品| 欧美日韩一区二区高清| 亚洲妇熟xx妇色黄蜜桃| 日本一区二区成人| 亚洲另类在线观看| 日韩av在线免播放器| 搞黄网站在线看| 3d动漫啪啪精品一区二区免费 | 国产99久久久| 亚洲国产精品悠悠久久琪琪| 日本理论片午伦夜理片在线观看| 国产主播精品在线| 久久国产成人精品| 九热视频在线观看| 中文字幕av一区二区三区高| 久久久精品毛片| 亚洲欧美日韩精品久久奇米色影视| a级片在线免费| 国产精品麻豆免费版| 国产主播一区| 亚洲熟妇一区二区| 亚洲综合偷拍欧美一区色| 不卡的日韩av| 欧美国产日韩一区二区在线观看| 97色婷婷成人综合在线观看| 中文字幕日韩一区二区三区不卡| 久久精品国产精品亚洲红杏| 一本在线免费视频| 精品污污网站免费看| 在线免费观看黄色网址| 国产精品专区一| 亚洲精品久久久| 国产91在线免费观看| 亚洲综合久久久久| 人妻妺妺窝人体色www聚色窝 | 国产一区二区日韩| 成人av色网站| 欧洲美女和动交zoz0z| 国产成人午夜精品影院观看视频 | 久久激情一区| 男人天堂资源网| 欧美精品日韩综合在线| 中文字幕在线播放网址| 国产精品初高中精品久久| 国产一级久久| 久久久国产一级片| 91精品国产综合久久香蕉麻豆| 性爱视频在线播放| 九色一区二区| 蜜桃视频一区二区三区| 三级av在线免费观看| 欧美精品一区二区在线播放| 欧美a级在线观看| 视频在线观看成人| 国产一区二区三区在线观看免费 | 久久99精品一区二区三区三区| 永久免费看片直接| 亚洲成人久久久| 性高爱久久久久久久久| 最新黄色av网站| 99久久99久久精品国产片果冻 | 久久精品国产av一区二区三区| 亚洲黄页视频免费观看| av成人亚洲| 久久手机在线视频| 国产女人aaa级久久久级| 精品国产一级片| 日韩美女在线观看| 欧美精品二区| 一级片视频免费看| 日韩一区二区麻豆国产| 一个人看的www视频在线免费观看| 性欧美videosex高清少妇| 国产91在线看| 这里只有精品免费视频| 欧美激情2020午夜免费观看| 黑人操亚洲人| 私密视频在线观看| 欧美久久一二区| 中老年在线免费视频| 日韩欧美视频免费在线观看| 久久久久久久网| 亚洲国产剧情在线观看| 国产精品成人播放| 亚洲精品四区| 久久精品一级片| 精品国产一区二区三区在线观看|