mdc和mdio是什么_mdc是哪个国家
在項目開發中,經常會巧妙借助 MDC 解決鏈路跟蹤、統計耗時等很多問題,通過往期分享的《MDC是什么鬼?用法、源碼一鍋端》,對 MDC 有了一個深入的了解,但是細心的同學在項目中,偶爾會發現 NDC 的身影(可能也從未謀面),那 NDC 到底是個什么玩意呢?
別急,通過今天的分享,能讓你輕松 get 如下幾點。
1. NDC 快速入門;
2. NDC 與 MDC 有何不同;
3. NDC 刨根問底
1.NDC 快速入門
NDC 的全稱是 Nested Diagnostic Context,直譯過來是:嵌套診斷上下文。文字略顯枯澀,能用代碼解釋的,一言不合就拋代碼。
上面這個代碼來源于 MDC 分享,只是把類名換成了 SimpleNDC,然后把 MDC 相關的 API 換成了 NDC。
引入slf4j-ext 依賴包,然后修改 logback.xml,采用%X取 NDC 中的值。
程序跑起來看看效果。
通過輸出,能夠得出如下結論。
a)NDC 提供的 push 方法,可以將一個值放進容器中,理解成入棧操作,當然可以多放幾個(自己試一試);
d)通過%X獲取 NDC 中所有的值;
b)NDC 中的值是線程隔離的,互不影響;
c)NDC 提供的 pop 方法,可以將一個值從容器中拿出來,理解成出棧操作。
根據結論的第二條,就能想到使用場景,當要把請求信息全部打印到日志文件中時,借助這種方式就輕而易舉實現。
2.NDC 與 MDC 有何不同?
a)MDC vs NDC ?
MDC 提供的 put 方法,可以將一個 K-V 的鍵值對放到容器中,并且能保證同一個線程內,Key 是唯一的,不同的線程 MDC 的值互不影響;
NDC 提供的 push 方法,可以將一個值放進容器中,理解成入棧操作,當然可以多放幾個;NDC 中的值是線程隔離的,互不影響。
b) MDC vs NDC ?
在 logback.xml 中,在 layout 中可以通過聲明%X{key}來輸出 MDC 中 key 的信息;
在 logback.xml 中,在 layout中可以通過聲明%X獲取 NDC 中所有的值;
c)MDC vs NDC?
MDC 提供的 remove 方法,可以清除 MDC 中指定 key 對應的鍵值對信息。
NDC 提供的 pop 方法,可以將一個值從容器中拿出來,理解成出棧操作。
3.NDC 刨根問底
好奇是程序猿(媛)的通病,還是好奇的要看看 NDC 背后是什么?
見到源碼,感覺累崩。org.slf4j.NDC底層居然借助 MDC 來實現的入棧、出棧。再結合 MDC 仔細去想,其實就是借助 Map 實現的數據存儲,只不過 NDC 把 key 給屏蔽啦,自己在內部給封裝啦,沒有對外暴露,見此應該豁然開朗了不少吧。
4.寫在最后
一次冷知識的分享,知其然知其所以然,希望有所收獲。
一起聊技術、談業務、噴架構,少走彎路,不踩大坑。會持續輸出原創精彩分享,敬請期待!
推薦閱讀:
總結
以上是生活随笔為你收集整理的mdc和mdio是什么_mdc是哪个国家的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP Fiori Elements -
- 下一篇: 梦幻诛仙什么职业适合平民(《梦幻西游》电