mdc和mdio是什么_mdc是哪个国家

mdc和mdio是什么_mdc是哪个国家在项目开发中,经常会巧妙借助MDC解决链路跟踪、统计耗时等很多问题,通过往期分享的《MDC是什么鬼?用法、源码一锅端》,对MDC有了一个深入的了解,但是细心的同学在项目中,偶尔会发现NDC的身影(可能也从未谋面),那NDC到底是个什么玩意呢?别急,通过今天的分享,能让你轻松get如下几点。1.NDC快速入门;2.NDC与MDC有何不同;3.NDC刨根问底1.ND…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

在项目开发中,经常会巧妙借助 MDC 解决链路跟踪、统计耗时等很多问题,通过往期分享的《MDC是什么鬼?用法、源码一锅端》,对 MDC 有了一个深入的了解,但是细心的同学在项目中,偶尔会发现 NDC 的身影(可能也从未谋面),那 NDC 到底是个什么玩意呢?

别急,通过今天的分享,能让你轻松 get 如下几点。

1. NDC 快速入门;

2. NDC 与 MDC 有何不同;

3. NDC 刨根问底

1.NDC 快速入门

NDC 的全称是 Nested Diagnostic Context,直译过来是:嵌套诊断上下文。文字略显枯涩,能用代码解释的,一言不合就抛代码。

47de49cdd90f0ee74e46a535548676eb.png

上面这个代码来源于 MDC 分享,只是把类名换成了 SimpleNDC,然后把 MDC 相关的 API 换成了 NDC。

引入 slf4j-ext 依赖包,然后修改 logback.xml,采用%X取 NDC 中的值。

4eb270ddcf754701e698c434595d37d4.png

程序跑起来看看效果。

fb290d48f1067b5c24cc7a0b92946298.png

通过输出,能够得出如下结论。

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 背后是什么?

ab406bd91be9067dd0b130645b655090.png

见到源码,感觉累崩。org.slf4j.NDC底层居然借助 MDC 来实现的入栈、出栈。再结合 MDC 仔细去想,其实就是借助 Map 实现的数据存储,只不过 NDC 把 key 给屏蔽啦,自己在内部给封装啦,没有对外暴露,见此应该豁然开朗了不少吧。

4.写在最后

一次冷知识的分享,知其然知其所以然,希望有所收获。

一起聊技术、谈业务、喷架构,少走弯路,不踩大坑。会持续输出原创精彩分享,敬请期待!

推荐阅读:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207154.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux mail发送邮件_shell传输文件

    linux mail发送邮件_shell传输文件Linux发邮件之mail命令详解发布于2017-01-0516:44:04|154次阅读|评论:0|来源:网友投递LinuxLinux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。这篇文章主要介绍了Linux发邮件之mail命令详解,详细的讲解…

    2022年10月20日
    4
  • 工业互联网大数据平台建设方案[通俗易懂]

    工业互联网大数据平台建设方案[通俗易懂]工业互联网大数据平台建设方案

    2022年6月10日
    36
  • 小程序onlaunch和onload(小程序onunload)

    所述问题:前端时间开发了一个微信小程序商城项目,因为这个项目我们的需求是进入小程序就通过wx.login({})这个api进行用户登录,获取系统后台的用户基本信息。再此之前,一直以为微信小程序中的App.js中onLaunch(小程序初始化完成执行该方法)方法比其他页面的的onload方法要先执行。那么问题就来了,我每次进入小程序首页的时候有时候会先执行onlaunch方法,有时又会先执…

    2022年4月14日
    146
  • JS链接转换为二维码

    JS链接转换为二维码这里用到一个JQ插件qrcode.js下载地址https://github.com/jeromeetienne/jquery-qrcode先引入<scriptsrc=”js/jquery.qrcode.min.js”></script>       <divclass=”content1″>…

    2025年9月18日
    5
  • 台风路径实时监控_查看Linux版本

    台风路径实时监控_查看Linux版本查看CentOS版本方法有以下命令可以查看:命令1:rpm-qcentos-release结果为:centos-release-7-7.1908.0.el7.centos.x86_64命令2:lsb_release-a这个命令适用于所有的linux,包括Redhat、SuSE、Debian、Centos等发行版。结果为:LSBVersion::core-4…

    2025年5月27日
    2
  • linux解压安装包rar_ubuntu rar文件解压

    linux解压安装包rar_ubuntu rar文件解压#wgethttps://www.rarlab.com/rar/rarlinux-x64-5.8.b4.tar.gz—>>下载包#ls-lrtrar/rar/order.htmrar/acknow.txtrar/readme.txtrar/default.sfxrar/license.txtrar/rarfiles.lstrar/…

    2022年10月21日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号