本文主要是介绍MDC和NDC(log4j打印自定义属性),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
0.前言
服务器日志打印时是按时间节点依次打印,在请求数过多时,很男凭借肉眼判断出一次请求的上下文。由此引出,如果每个request都带有唯一的标识,查询日志上下文时是不是就很方便.
1.log4j自带的NDC和MDC
1.1.NDC(Nested Diagnostic Context)
NDC采用栈的机制存储上下文,线程独立的,子线程会从父线程拷贝上下文。:
方法:
- NDC.push(message);保存信息
- NDC.pop();删除栈顶消息
- NDC.remove();清除所有消息
log4j配置:[%x]
1.2.MDC(Mapped Diagnositc Context)
MDC采用Map的方式存储上下文,线程独立的,子线程会从父线程拷贝上下文。
方法:
- MDC.put(key, value);保存信息
- MDC.get(key);获取消息
- MDC.remove(key);删除消息
- MDC.clear();清空消息
log4j配置:%X{key} 或者 %X 输出全部消息
2.使用
一般来讲会把 唯一id在开始时加入上下文,在结束时删除,所以一般会配置两个filter,请求开始时push/put,请求结束时,pop,使用NDC时,要使用NDC.remove()方法。
这篇关于MDC和NDC(log4j打印自定义属性)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!