MDC 输出线程信息帮助定位问题
log4j中的%x ---NDC,%X---MDC
即%x
NDC.clear();
NDC.push(this.toString());
%X{first} %X{last}
MDC.put("first", "Dorothy"); Logger logger = LoggerFactory.getLogger(SimpleMDC.class); // We now put the last name MDC.put("last", "Parker");
mdc 实际上是一个封装了ThreadLocal变量的一个类。
官方实现:mdc 包含了一个ThreadLocalMap 因为 ThreadLocalMap extends InheritableThreadLocal 所以他有特性1:可以向下传递,2.本身处理的是hashTable 。
final static MDC mdc = new MDC(); static final int HT_SIZE = 7; boolean java1; Object tlm; private Method removeMethod; private
MDC() {
java1 = Loader.isJava1();
if(!java1) {
tlm = new ThreadLocalMap();
} try {
removeMethod = ThreadLocal.class.getMethod("remove", null);
} catch (NoSuchMethodException e) {
// don't do anything - java prior 1.5
}
}
NDC
一层一层深入 发现也是包含了一个 ThreadLocal,由于它不具有InheritableThreadLocal 的特性,所以开启新线程的时候,需要手动重新设置。
public static void push(String message) {
ThreadContext.push(message);
}
public void push(String message) {
if (this.useStack) {
this.add(message);
}
}
public boolean add(String s) {
if (!this.useStack) {
return false;
} else {
MutableThreadContextStack copy = this.getNonNullStackCopy();
copy.add(s);
copy.freeze();
stack.set(copy);
return true;
}
}
public class DefaultThreadContextStack implements ThreadContextStack {
private static final long serialVersionUID = 5050501L;
private static final ThreadLocal<MutableThreadContextStack> stack = new ThreadLocal();
private final boolean useStack;
开启线程时操作
final String s=NDC.get();
final Map<String, String> mdcdata = MDCUtil.peekMap();
ThreadPoolUtil.ex.execute(new Runnable() {
@Override
public void run() {
MDCUtil.set(mdcdata);
NDC.push(s);
alarmInfoSao.sendAlarmEventMsg(alarmEventDTO);
}
});
MDC 输出线程信息帮助定位问题的更多相关文章
- log4j2自定义输出线程环境信息
在配置日志的输出格式的时候,我们可以按照内置的规则输出日志,但是有时候需要及时输出我们自定义的信息,这时需要借助ThreadContext类. ThreadContext类类似于MDC和NDC,它是一 ...
- (转)linux进程 linux线程 信息查看 ps top pstree
原文:https://blog.csdn.net/xiaoliuliu2050/article/details/81912202 https://blog.csdn.net/u011734144/ar ...
- 【旧文章搬运】ZwQuerySystemInformation枚举进线程信息
原文发表于百度空间,2008-10-15========================================================================== 很古老的东 ...
- 前端知识体系:JavaScript基础-原型和原型链-理解JavaScript的执行上下文栈,可以应用堆栈信息快速定位问题
理解JavaScript的执行上下文栈,可以应用堆栈信息快速定位问题(原文文档) 1.什么是执行上下文: 简而言之,执行上下文就是当前JavaScript代码被解析和执行时所在环境的抽象概念,Java ...
- 获取系统中所有进程&线程信息
读书笔记--[计算机病毒解密与对抗] 目录: 遍历进程&线程程序 终止进程 获取进程信息 获取进程内模块信息 获取进程命令行参数 代码运行环境:Win7 x64 VS2012 Update3 ...
- 创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法)。
创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法). ackage com.chuoji.text01; pub ...
- js操作dom---创建一个域来输出调试信息
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- 在MFC中,使用控制台Console输出调试信息
1.在MFC的应用类的InitInstance()函数里添加: AllocConsole(); 有时候需要调整这行代码在InitInstance函数的位置 2.继续添加以下代码 freopen(&qu ...
- 查看android app 线程信息的命令
参考:https://my.oschina.net/zhiweiofli/blog/138454 ps | grep 'joyodream' 找到 app 的pid: joyodream为包名的一部分 ...
随机推荐
- java.util.UUID工具类
生成数据表的主键Id会用到此工具类 /** * <获取主鍵> * <获取32位UUID> * @return * @see [类.类#方法.类#成员] */ public st ...
- 第四十六篇 入门机器学习——kNN - k近邻算法(k-Nearest Neighbors)
No.1. k-近邻算法的特点 No.2. 准备工作,导入类库,准备测试数据 No.3. 构建训练集 No.4. 简单查看一下训练数据集大概是什么样子,借助散点图 No.5. kNN算法的目的是,假如 ...
- linux-zookeeper安装、配置
1.下载zookeeper包 (地址:https://www-eu.apache.org/dist/zookeeper/) 2.上传zookeeper包到指定位置(例如: /usr/local/sof ...
- rancher说明为什么需要按照指定版本安装以及rancher和节点linux环境配置-docker指定版本安装
rancher说明为什么需要按照指定版本安装以及rancher和节点linux环境配置-docker指定版本安装 待办 https://blog.csdn.net/CSDN_duomaomao/art ...
- 1025 PAT Ranking (25分)
1025 PAT Ranking (25分) 1. 题目 2. 思路 设置结构体, 先对每一个local排序,再整合后排序 3. 注意点 整体排序时注意如果分数相同的情况下还要按照编号排序 4. 代码 ...
- Linux(Mac)常用命令
df -B[G,M,K]查看磁盘剩余空间 free -mh查看内存 netstat -ntlp查看当前监听的网络端口 mount -t auto /dev/cdrom /media/cdrom挂载cd ...
- 转载:DRC
https://cn.mathworks.com/help/audio/ug/dynamic-range-control.html?requestedDomain=cn.mathworks.com h ...
- 【转载】Win7下如何使用GCC编译器
转自:http://jingyan.baidu.com/article/c275f6bacc0126e33c756771.html 双击GCC安装包,mingw-get-setup.exe,点击Ins ...
- golang采坑记录
安装golang,引入第三方库,采坑 1.获取安装包 go语言中文网:https://studygolang.com/dl 官网地址:https://studygolang.com/dl 2.下载 选 ...
- bodyParser.urlencoded({ })里extended: true和false区别???