`
wsmajunfeng
  • 浏览: 498132 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MDC和NDC

 
阅读更多

org.apache.log4j  
Class MDC

java.lang.Object
  

extended by

org.apache.log4j.MDC


public class MDC
extends java.lang.Object

The MDC class is similar to the NDC  class except that it is based on a map instead of a stack. It provides mapped diagnostic contexts . A Mapped Diagnostic Context , or MDC in short, is an instrument for distinguishing interleaved log output from different sources. Log output is typically interleaved when a server handles multiple clients near-simultaneously.

The MDC is managed on a per thread basis . A child thread automatically inherits a copy  of the mapped diagnostic context of its parent.

The MDC class requires JDK 1.2 or above. Under JDK 1.1 the MDC will always return empty values but otherwise will not affect or harm your application.

 

 

Since:
1.2

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 方法,对指定的配置文件进行监控,并且可以设置检查的间隔时间。

分享到:
评论

相关推荐

    log4j Manual

    9. **MDC和NDC**:Mapped Diagnostic Context (MDC) 和Nested Diagnostic Context (NDC) 提供了上下文信息,帮助跟踪和分析日志。MDC用于存储固定键值对,NDC则可以堆叠多个诊断信息。 10. **自定义Appender和...

    java日志jar包

    7. **MDC和NDC**:Mapped Diagnostic Context (MDC) 和Nested Diagnostic Context (NDC) 提供了上下文信息,帮助追踪和分析日志。MDC用于存储键值对,NDC则用于存储线程相关的日志信息栈。 8. **自定义日志处理器**...

    log4 打印日志文件例子

    8. **MDC和NDC**:Mapped Diagnostic Context (MDC) 和Nested Diagnostic Context (NDC) 提供了上下文信息,帮助追踪日志中的关键数据,例如线程ID、请求ID等。 9. **自定义日志记录器**:开发者可以根据需求创建...

    slf4j-1.7.22

    3. **MDC和NDC**:SLF4J提供了`Mapped Diagnostic Context`(MDC)和`Nested Diagnostic Context`(NDC)功能,帮助开发者在日志中添加上下文信息。MDC主要用于存储和检索键值对,而NDC则允许按层次结构添加信息,...

    Log4Net_Demo.zip

    8. **MDC和NDC**:Mapped Diagnostic Context (MDC) 和 Nested Diagnostic Context (NDC) 提供了上下文相关的日志信息,例如跟踪请求ID或用户ID。 9. **异常处理**:Log4Net可以方便地记录和处理异常信息,帮助...

    log4j-2.11.1.jar

    - MDC 和 NDC 是两种上下文诊断工具,用于存储线程相关的日志信息,有助于调试和追踪问题。 7. **日志级别与日志策略** - 支持多种日志级别,如DEBUG、INFO、WARN、ERROR和FATAL,可以根据需要调整日志输出的详细...

    slf4j结合log4j的demo,带配置文件

    5. **MDC和NDC**:Log4j提供了Mapped Diagnostic Context (MDC) 和 Nested Diagnostic Context (NDC) 功能,可以存储线程相关的上下文信息,方便日志分析。例如,MDC可以用来存储用户ID,以便追踪特定用户的操作日志...

    logback高级使用例子

    Mapped Diagnostic Context (MDC)和Nested Diagnostic Context (NDC)是Logback提供的上下文信息管理工具,可帮助追踪请求或事务。MDC是键值对的形式,而NDC则按栈结构存储信息。 **总结** Logback作为强大的日志...

    slf4j1.6.1-1.6.4.zip

    8. **MDC和NDC**:SLF4J支持MDC(Mapped Diagnostic Context)和NDC(Nested Diagnostic Context),这两种上下文信息可以用来跟踪和诊断问题,比如存储线程相关的调试信息。 9. **异常处理**:SLF4J允许直接传递...

    slf4j-1.5.2架包(完整版)

    5. **MDC和NDC**:SLF4J支持MDC(Mapped Diagnostic Context)和NDC(Nested Diagnostic Context),这两种上下文可以帮助在日志中添加环境相关的数据,如线程ID、请求ID等,以便于调试和追踪。 6. **日志配置**:...

    log4j的源码

    9. **MDC和NDC**:Mapped Diagnostic Context(MDC)和Nested Diagnostic Context(NDC)提供了一种方法,将上下文信息添加到日志消息中,这对于追踪和调试非常有用。 10. **API使用**:在代码中,可以通过`org....

    log4j各种配置连接

    8. **MDC和NDC**:Mapped Diagnostic Context (MDC) 和 Nested Diagnostic Context (NDC) 是Log4j提供的上下文信息存储功能,用于在日志信息中携带额外的调试信息,如请求ID、用户ID等。 总之,Log4j的配置连接是一...

    最新的slf4j-1.7.6

    5. **MDC和NDC**:SLF4J支持Mapped Diagnostic Context (MDC)和Nested Diagnostic Context (NDC),这两者可以帮助记录和追踪日志上下文信息,如线程ID、请求ID等。 6. **日志配置**:虽然SLF4J本身不提供配置,但与...

    Log4j自已配置

    - 异常追踪时,可以使用Mapped Diagnostic Context (MDC)和Nested Diagnostic Context (NDC)存储相关上下文信息,方便调试。 8. **性能优化**: - 为了提高性能,可以启用日志缓冲(`BufferedIO`)和批量写入(`...

    slf4j-api-1.6.3

    5. **MDC和NDC**:Mapped Diagnostic Context (MDC) 和Nested Diagnostic Context (NDC) 是SLF4J提供的两种上下文信息管理机制,用于添加和检索线程相关的诊断信息,帮助跟踪和调试问题。 6. **日志配置**:虽然SLF...

    log4j 例子

    - **MDC和NDC**: Mapped Diagnostic Context (MDC) 和 Nested Diagnostic Context (NDC) 提供了存储上下文信息的能力,方便追踪和调试。 ### 5. 学习资源与实践 - **官方文档**: 阅读Apache Log4j的官方文档,了解...

    asp.net lognet4 使用文档

    - **MDC和NDC**:提供Mapped Diagnostic Context (MDC) 和Nested Diagnostic Context (NDC) 功能,用于关联上下文信息,帮助定位问题。 4. **最佳实践** - **日志策略**:合理设定日志级别,避免记录过多无用信息...

    Log4j2使用案例

    - MDC和NDC提供上下文信息存储,帮助追踪特定请求或事务的日志。 10. **性能优化** - 使用适当的日志级别,避免在生产环境中开启过多调试日志。 - 合理配置日志文件大小和滚动策略,防止磁盘空间被过度占用。 ...

    log4j入门到详解

    MDC 和 NDC 提供了一种存储和检索与当前线程相关的诊断信息的方法,常用于添加请求ID或用户ID到日志中,便于追踪问题。 8. **Log4j2** 随着时间的发展,Log4j 推出了更新版本 Log4j2,它引入了许多新特性,如异步...

    log4j入门、详解

    MDC和NDC是两个辅助工具,用于在日志信息中添加额外的上下文信息。MDC是线程绑定的,适合记录与特定线程相关的数据;NDC则用于记录嵌套调用堆栈的信息。 ### 7. 自定义Appender与Layout 除了预定义的Appender和...

Global site tag (gtag.js) - Google Analytics