精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲免费大片在线观看| 欧美日一区二区三区在线观看国产免| 亚洲欧美偷拍三级| 2019中文字幕在线| 最新中文字幕视频| 国产精品天堂蜜av在线播放| 一区二区三区中文字幕精品精品| 精品一区二区国产| 91资源在线视频| 亚洲破处大片| 亚洲欧美国产一区二区三区| 做a视频在线观看| 国产盗摄——sm在线视频| 国产欧美一区二区精品性色| 99re视频在线| 影音先锋国产在线| 亚洲美女少妇无套啪啪呻吟| 尤物tv国产一区| 日本女人性视频| 香蕉成人av| 亚洲一区在线电影| 亚洲精品久久区二区三区蜜桃臀 | 午夜精品福利久久久| 日韩精品久久久| 国产精品亚洲欧美在线播放| 国产精品腿扒开做爽爽爽挤奶网站| 中文字幕日韩在线播放| 精品无码人妻少妇久久久久久| 亚洲伦乱视频| 精品动漫一区二区| 小泽玛利亚av在线| 福利所第一导航| 国产资源一区| 色综合天天在线| 国产亚洲污的网站| 日韩中文av在线| 国产国语性生话播放| 另类中文字幕国产精品| 精品人伦一区二区三区蜜桃网站 | 成人激情春色网| 国产精品视频一区在线观看| 国产综合婷婷| 操日韩av在线电影| 四虎地址8848| 日韩1区在线| 国产午夜一区二区| 国产aⅴ激情无码久久久无码| 开心激情综合| 精品久久久久久久久久久院品网 | 久久久久久无码精品大片| 日韩视频中文| 66m—66摸成人免费视频| 久久精品www| 国内精品久久久久久久影视蜜臀| 欧美人与性动交| 亚洲国产精品免费在线观看| 夜间精品视频| 欧美另类交人妖| 午夜少妇久久久久久久久| 欧美va天堂在线| 欧美乱大交做爰xxxⅹ性3| 免费毛片在线播放免费| 国产精品激情| 97国产精品免费视频| 日本免费观看视| 免费久久99精品国产自在现线| 69久久夜色精品国产69乱青草| 97超碰人人干| 视频一区在线播放| 国产精自产拍久久久久久| 欧美特级黄色片| 久久精品国产色蜜蜜麻豆| 成人乱人伦精品视频在线观看| 国产视频在线免费观看| 亚洲精华一区二区三区| 欧美成人一区二区三区在线观看 | 国产午夜精品免费一区二区三区| 亚洲精品午夜视频| 香蕉视频亚洲一级| 亚洲国产一区二区a毛片| 精品一区二区三区无码视频| 亚洲插插视频| 亚洲三级在线观看| 青青草精品视频在线| 伊人久久精品一区二区三区| 欧美亚洲日本一区| 男男受被啪到高潮自述| 精品国产导航| 中文字幕日韩高清| 强行糟蹋人妻hd中文| 一区二区日本视频| 国产日本欧美一区| 国产刺激高潮av| 国产亚洲婷婷免费| 大荫蒂性生交片| 另类中文字幕国产精品| 日韩免费观看高清完整版 | 男人的天堂久久| 在线视频欧美性高潮| 天天综合天天做| 午夜在线播放视频欧美| 91欧美激情另类亚洲| 婷婷国产在线| 亚洲精品日韩专区silk| 成人观看免费完整观看| 9999精品视频| 亚洲第一区在线| 国精产品久拍自产在线网站| 国产欧美午夜| 亚洲字幕在线观看| 97电影在线| 午夜国产不卡在线观看视频| www.日本一区| 天天做夜夜做人人爱精品| 久久精品99国产精品酒店日本 | 先锋影音av在线| 欧美日韩三级| 国产日韩av在线播放| 四虎精品成人影院观看地址| 玉足女爽爽91| 国产欧美一区二| 欧美亚洲精品在线| 欧美一级片久久久久久久| av网站在线免费看| 中日韩免费视频中文字幕| 成熟了的熟妇毛茸茸| 亚洲高清999| www.国产一区| 中文 欧美 日韩| 久久久久久久久蜜桃| 欧美国产日韩激情| 精品一区二区三区亚洲| 在线播放国产一区中文字幕剧情欧美 | 蜜乳av综合| 性色av一区二区三区| www日本高清视频| 亚洲日本成人在线观看| 成年网站免费在线观看| 成人看的羞羞网站| 国产激情999| 男女视频在线观看| 日韩欧美国产免费播放| 精品无码国产一区二区三区51安| 欧美精品综合| 成人av免费电影| 日韩精品卡一| 精品日韩av一区二区| 欧美黄色一级网站| 国产精品18久久久久久久网站| 亚洲小说欧美另类激情| 国产精品igao视频网网址不卡日韩| 日韩中文视频免费在线观看| 91精品国自产| 亚洲丝袜美腿综合| 亚洲精品乱码久久久久久9色| 88国产精品视频一区二区三区| 国产欧美久久久久久| 一本一道波多野毛片中文在线 | 777一区二区| 天天射天天综合网| 亚洲一区二区在线| 久久av色综合| 亚洲国产99精品国自产| 毛片基地在线观看| 久久久91精品国产一区二区三区| 91香蕉视频污版| 99久久.com| 亚洲xxx自由成熟| 97在线超碰| 亚洲美腿欧美激情另类| 国产亚洲欧美日韩高清| 中文字幕一区二区三区色视频 | 中国丰满人妻videoshd | 东方欧美亚洲色图在线| 成人在线观看你懂的| 精品影片在线观看的网站| 国产精品三级网站| fc2ppv国产精品久久| 亚洲国产成人精品女人久久久 | 欧美日韩天天操| 激情小说亚洲| 欧美黑人一区二区三区| 深夜视频在线免费| 欧美日韩国产成人在线免费| 欧美成欧美va| 26uuu久久天堂性欧美| 色噜噜狠狠永久免费| 欧美日韩三区| 日韩中文字幕av在线| 试看120秒一区二区三区| 国产91精品不卡视频| 嫩草在线视频| 日韩大陆欧美高清视频区| 日韩不卡高清视频| 亚洲一区二区三区影院| 色欲AV无码精品一区二区久久| 国产在线精品一区二区不卡了| 91免费黄视频| 99热国内精品永久免费观看| 国产精品中出一区二区三区| 91国内外精品自在线播放| 久久久久久久久久久久久久久久久久av| 裸体xxxx视频在线| 日韩美女一区二区三区四区| 无码人妻丰满熟妇区五十路 | 成人午夜免费视频| 最新天堂中文在线| 在线亚洲观看| 男人天堂网站在线| 成人久久综合| 免费电影一区| 丁香婷婷成人| 91久久久久久久久久久久久| 日韩精品专区| 午夜精品福利在线观看| 操你啦在线视频| 国产一区二区三区在线视频| 蜜臀av中文字幕| 91 com成人网| 最近中文字幕免费在线观看| 黄色一区二区在线观看| 激情视频在线播放| **性色生活片久久毛片| 国产91丝袜美女在线播放| 久久在线免费观看| 完美搭档在线观看| 国产成人一区在线| 成人亚洲免费视频| 奇米影视在线99精品| 国产精品沙发午睡系列| 精品999日本| 91看片淫黄大片91| 亚洲精品一区二区在线看| 视频一区视频二区视频三区高| 香蕉免费一区二区三区在线观看| 国产日本欧美在线观看| 巨胸喷奶水www久久久免费动漫| 26uuu另类亚洲欧美日本一| 波多野结衣中文在线| 欧美第一黄色网| 国产激情视频在线| 久久香蕉国产线看观看av| 成年人视频免费在线观看| 国产性猛交xxxx免费看久久| 可以在线观看的av| 亚洲欧美日韩成人| 青青草在线免费视频| 国产视频精品免费播放| 日本私人网站在线观看| 亚洲欧美日韩中文在线制服| 日韩在线免费播放| 亚洲男人天堂网站| 国产精品秘入口| 一道本无吗dⅴd在线播放一区| 国产视频网址在线| 伊人久久综合97精品| jizzjizz在线观看| 久久精品影视伊人网| 最新av在线播放| 国内精品视频一区| 深夜福利视频一区二区| 欧美重口另类videos人妖| 欧美特黄aaaaaaaa大片| 国产精品久久电影观看| 日韩欧乱色一区二区三区在线| 91久久精品国产91久久性色| 国产一区二区视频在线看| 国产a一区二区| 欧美亚洲国产日韩| 日韩免费毛片| 一区二区蜜桃| 91丨porny丨探花| 美女黄色成人网| 日本三级黄色网址| 国产99久久久国产精品| 亚洲天堂资源在线| 日本一区二区视频在线| 老熟妇高潮一区二区三区| 一区二区高清在线| 黄色一级片免费在线观看| 欧美日韩一二三| www日本高清| 亚洲天堂av在线免费| 精品国产丝袜高跟鞋| 韩国一区二区电影| 国模一区二区| 99在线观看| 国产探花在线精品| 欧美一级爱爱视频| 日韩av一级电影| 无码人妻一区二区三区一| 337p粉嫩大胆色噜噜噜噜亚洲| 日本成人免费在线观看| 亚洲电影在线播放| 中文字幕有码无码人妻av蜜桃| 欧美大片在线观看一区二区| 国产理论电影在线观看| 欧美激情精品久久久久久蜜臀| 欧美aa视频| 91九色露脸| 精品午夜久久| 亚洲 欧美 日韩 国产综合 在线| 欧美aaaaaa午夜精品| 99久久久无码国产精品性波多| 中文字幕高清不卡| 青青操免费在线视频| 69av一区二区三区| 免费成人av电影| 久久久欧美一区二区| 四虎国产精品成人免费影视| 欧美国产一区二区在线| 欧美福利在线| 一级片视频免费观看| 26uuu国产日韩综合| 免费在线一级片| 欧美麻豆精品久久久久久| 四虎电影院在线观看| 国产+人+亚洲| 欧美电影在线观看一区| 亚洲国内在线| 快she精品国产999| 精品一区二区三区四区五区六区| 国产精品欧美一区二区三区| 国产九色在线播放九色| 欧美mv和日韩mv的网站| 自拍视频在线网| 日本韩国在线不卡| 卡一精品卡二卡三网站乱码 | 亚洲一区 欧美| 福利视频一区二区| 蜜桃91麻豆精品一二三区| 美女视频久久黄| 国模大尺度视频一区二区| 亚洲一区二区三区乱码| 奇米色一区二区三区四区| 久操视频免费看| 日韩欧美成人精品| 免费在线超碰| 日本成人激情视频| 欧美日韩123| 国产性生交xxxxx免费| 久久婷婷国产综合国色天香| 日韩成人高清视频| 亚洲国内高清视频| av成人 com a| 久久99精品久久久久久三级| 日韩香蕉视频| 精品无码人妻一区| 色婷婷国产精品久久包臀| 青青免费在线视频| 国产精品久久97| 久久婷婷蜜乳一本欲蜜臀| 亚洲欧美视频二区| 国产精品福利影院| 国产欧美久久久精品免费| 美女精品久久久| 国产精品久久久久av蜜臀| 欧美激情视频免费看| 99re视频精品| 日本久久综合网| 主播福利视频一区| 久久爱www.| 黄网站欧美内射| 久久精品欧美日韩精品 | 欧美一激情一区二区三区| 天堂va在线| 久久国产精品一区二区三区四区| 免费中文字幕日韩欧美| 中文字幕第24页| 日韩欧美国产综合一区 | 色美美综合视频| 日本在线看片免费人成视1000| 成人网在线免费看| 影音先锋中文字幕一区| 可以直接看的无码av| 欧美又粗又大又爽| 91极品在线| 乱色588欧美| 精品一区二区三区免费观看| 久久精品视频国产| 国产一区二区三区在线观看网站| 国产三级一区| 韩日视频在线观看| 国产日韩精品视频一区| 精品乱子伦一区二区| 欧美亚洲成人网| 国产精品videosex性欧美| 荫蒂被男人添免费视频| 欧美性一二三区| 电影在线观看一区| 亚洲三区四区| jlzzjlzz国产精品久久| 91黄色在线视频| 97成人精品区在线播放| 亚洲影视一区二区三区| 玖玖爱在线观看| 欧美xxx久久| 97成人超碰| 免费在线观看亚洲视频| 自拍偷拍欧美精品|