NDC和MDC
NDC(Nested Diagnostic Context)和MDC(Mapped Diagnostic Context)是log4j种非常有用的两个类,它们用于存储应用程序的上下文信息(context infomation),从而便于在log中使用这些上下文信息。
NDC采用了一个类似栈的机制来push和pop上下文信息,每一个线程都独立地储存上下文信息。比如说一个servlet就可以针对每一个request创建对应的NDC,储存客户端地址等等信息。
当使用的时候,我们要尽可能确保在进入一个context的时候,把相关的信息使用NDC.push(message);在离开这个context的时候使用NDC.pop()将信息删除。另外由于设计上的一些问题,还需要保证在当前thread结束的时候使用NDC.remove()清除内存,否则会产生内存泄漏的问题。
存储了上下文信息之后,我们就可以在log的时候将信息输出。在相应的PatternLayout中使用”%x”来输出存储的上下文信息,下面是一个PatternLayout的例子:
%r [%t] %-5p %c{2} %x - %m%n
使用NDC最重要的好处就是,当我们想输出一些上下文的信息的时候,不需要让logger去寻找这些信息,而只需要在适当的位置进行存储,然后再配置文件中修改PatternLayout。在最新的log4j 1.3版本中增加了一个org.apache.log4j.filters.NDCMatchFilter,用来
根据NDC中存储的信息接受或拒绝一条log信息。
MDC和NDC非常相似,所不同的是MDC内部使用了类似map的机制来存储信息,上下文信息也是每个线程独立地储存,所不同的是信息都是以它们的key值存储在”map”中。相对应的方法,MDC.put(key, value); MDC.remove(key); MDC.get(key); 在配置PatternLayout的时候使用:%x{key}来输出对应的value。同样地,MDC也有一个org.apache.log4j.filters.MDCMatchFilter。这里需要注意的一点,MDC是线程独立的,但是一个子线程会自动获得一个父线程MDC的copy。
至于选择NDC还是MDC要看需要存储的上下文信息是堆栈式的还是key/value形式的。
动态修改日志配置
在开发过程中,我们经常会遇到修改log4j配置的情况,在这种情况下,频繁重启应用显然是不可接受的。幸好log4j提供了自动重新加载配置文件的能力,在配置文件修改后,便会自己重新加载配置。在1.2及以前的版本中DOMConfigurator和PropertyConfigurator都提供了configureAndWatch方法,对指定的配置文件进行监控,并且可以设置检查的间隔时间。
转自:http://zhanglm.iteye.com/blog/611860
分享到:
相关推荐
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n ################### # 单个日子记录 ################### log4j...
Log4j比较全面的配置 log4j.rootLogger=DEBUG,CONSOLE,A1,im log4j.addivity.org.apache=true # 应用于控制台 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.Threshold=DEBUG log4j....
NDC8将EventLog存入SqlServer数据库
- Support for a log formatter (similar to Layouts in Log4J) - Support for console log - Support for smtp formatter - Support for XML logs - Support for syslog - Support for changing format and level ...
ndc开发文档,国外atm需遵照NDC协议,该文档包含具体开发流程
NDC概念与意义.doc
2006年版的NCR公司推出的NDC协议。NDC协议完整指导了NCR的ATM流程控制与响应控制机制。但是当时没有出现存取款一体机,所以此协议并没有把存款模块的控制与管理加到其中。
ATM 行业, 国外常用的Aptra NDC协议
ATM 行业, 2011版 Aptra NDC协议 文档
NDC,全称为NCR Direct Connect,是NCR公司开发的,用来连接ATM与银行主机的一个软件协议。如今ATM行业估计有人已经不知其为何物了,因为现如今的中国ATM行业已经大多不会再用到NDC了,但是NDC作为曾经的一个产物,...
良信 NDC1系列交流接触器技术样本pdf,良信 NDC1系列交流接触器技术样本
IDC和NDC互动关系分析.pdf
美国NDC,红外水分仪,红外测水,进口水分仪,北京宇宏泰,烧结球团测水,烧结自动加水,自动打水,炼钢炼铁,CM710e,MM710,TM710,TM710e,Series 9,PrediktIR
美国NDC,红外水分仪,红外测水,进口水分仪,北京宇宏泰,烧结球团测水,烧结自动加水,自动打水,炼钢炼铁,CM710e,MM710,TM710,TM710e,eries 9,PrediktIR
它与主机无关,因此可以指向任何NDC主机。 安装 使用Maven 将以下依赖项添加到项目的依赖项中 <groupId>org.iata.ndc <artifactId>ndc-client <version>0.1.4 <scope>compile 使用Gradle 将以下依赖项...
美国NDC,红外水分仪,红外测水,进口水分仪,北京宇宏泰,烧结球团测水,烧结自动加水,自动打水,炼钢炼铁,CM710e,MM710,TM710,TM710e,eries 9,PrediktIR
NDC8Demo消息交互流程图
2020年1月NDC伦敦会议 ASP.NET Core Blazor 经典范例代码,包含了2个示例,其中 Blazor Mark 超级卖场示例UI展现及与后端通过g-rpc进行高效,强类型的数据交换!值得学习!
NDC8系统应用设计器常用参数
NDC概念及其意义.doc