`
hanyi366
  • 浏览: 290806 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

log4j 中MDC与NDC区别

阅读更多
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-API-最新稳定版本log4j-1.2.17

    7. **MDC(Mapped Diagnostic Context)和NDC(Nested Diagnostic Context)**:这两个特性提供了上下文信息,帮助追踪和调试多线程环境中的问题。 8. **自定义日志等级和日志事件**:开发者可以通过继承`Priority`...

    log4j jarjar包

    3. **MDC和NDC**:Mapped Diagnostic Context (MDC) 和 Nested Diagnostic Context (NDC) 可以存储和传递与日志事件相关的上下文信息。 4. **Filter**:过滤器机制允许在日志事件被处理之前进行条件判断,进一步...

    java-日志-log4j.7z

    此外,Log4j还支持MDC(Mapped Diagnostic Context)和NDC(Nested Diagnostic Context),这些特性可以附加上下文信息到日志记录中,对于调试多线程和分布式系统非常有用。 如果你对Log4j的具体使用还有疑问,可以...

    log4j简单使用

    8. **MDC (Mapped Diagnostic Context)** 和 **NDC (Nested Diagnostic Context)**: 这两个特性提供了在日志中附加上下文信息的能力,对于跟踪请求、事务或线程很有用。 9. **使用示例**: 在代码中,我们通常会这样...

    log4j多个简单实例

    MDC(Mapped Diagnostic Context)和NDC(Nested Diagnostic Context)是Log4j提供的上下文诊断工具。它们可以用来存储与线程相关的诊断信息,便于在复杂环境中追踪问题。 通过以上实例,你已经了解了Log4j的基本...

    Log4J完整说明和配置

    ### Log4J完整说明与配置解析 #### 一、Log4J简介 Log4J是Apache的一个开源项目,用于提供灵活的日志记录功能。通过它,开发者能够控制日志信息的输出级别、输出目的地(控制台、文件等)、格式化方式等。本文将...

    log4j-slf4j-impl.zip

    5. **MDC与NDC**:Log4j-SLF4J-Impl支持Mapped Diagnostic Context (MDC) 和Nested Diagnostic Context (NDC),为日志信息添加上下文信息,有助于追踪和诊断问题。 四、集成与使用 集成Log4j-SLF4J-Impl通常涉及...

    apache-log4j-2.4.1-bin.zip

    Apache Log4j 2是Java世界中广泛使用的日志记录框架之一,它的最新版本为2.4.1。Log4j 2相比其前身Log4j 1.x,提供了许多改进和新特性,使得它在性能、可配置性、可扩展性和稳定性方面有了显著提升。在本文中,我们...

    log4j-2.11.1.jar

    在2.11.1这个版本中,Log4j 继续提供高效、灵活的日志记录解决方案,旨在满足各种开发需求。本文将深入探讨Log4j 2.11.1的核心特性和使用方法。 1. **核心组件与架构** - **Loggers**: 日志记录器是Log4j 的核心...

    log4j中文手册

    为了确保日志信息的上下文清晰,Log4j还支持Nested Diagnostic Contexts(NDC)和Mapped Diagnostic Contexts(MDC),它们提供了在不同上下文中附加诊断信息的能力。NDC允许日志记录器记录一个线程特有的诊断信息,...

    log4j生成带时间戳的日志文件(包括extras包以及简单demo)

    Log4j extras包是Log4j的一个扩展,提供了更多功能,如MDC(Mapped Diagnostic Context)、NDC(Nested Diagnostic Context)等。这些功能可以帮助开发者更好地管理日志上下文,尤其在多线程环境中非常有用。例如,...

    log4j-1.2.17.jar

    7. **MDC与NDC**:Mapped Diagnostic Context (MDC) 和Nested Diagnostic Context (NDC) 提供了上下文信息跟踪功能,帮助开发者在分布式系统或多线程环境中定位问题。 总结来说,"log4j-1.2.17.jar"作为Log4j的早期...

    log4j配置详解与使用方法说明

    ### 五、Log4j与其他日志框架比较 Log4j的替代品有Logback、SLF4J(Simple Logging Facade for Java)等。SLF4J 提供了一个抽象层,允许在运行时绑定不同的日志实现,如Logback(SLF4J的推荐实现)和Log4j。Logback...

    log4j-1.2.17含源码

    《深入理解Log4j 1.2.17:源码与JAR包解析》 在软件开发领域,日志记录是一项至关重要的任务,它帮助开发者跟踪程序运行状态,定位和解决问题。Log4j作为Apache组织的一个开源项目,是Java平台上最常用的日志框架之...

    log4j记录Debug日志

    9. **MDC与NDC**:Mapped Diagnostic Context (MDC) 和 Nested Diagnostic Context (NDC) 是Log4j提供的两个特性,用于存储与当前线程相关的诊断信息,帮助追踪问题。 10. **日志切割与归档**:Log4j可以配置自动...

    log4j入门、详解

    总结来说,Log4j是一个强大且灵活的日志框架,它的广泛使用证明了其在Java应用日志管理中的价值。通过深入理解和正确配置,Log4j可以帮助开发者更好地监控程序状态,定位和解决问题,从而提升软件的稳定性和可靠性。...

    apache-log4j-2.9.0-src.zip

    10. **MDC与NDC**:Mapped Diagnostic Context (MDC) 和 Nested Diagnostic Context (NDC) 是Log4j提供的上下文信息管理工具,帮助关联特定的日志信息,便于调试和追踪。 通过研究Log4j 2.9.0的源码,开发者可以...

    log4j-core-2.7.zip

    描述中提到,Struts2版本2.5.10.1依赖于Log4j2,这意味着开发者在使用该版本的Struts2时,需要引入两个关键的Log4j2库:log4j-api-2.7和log4j-core-2.7。log4j-api-2.7提供了API接口,供应用程序调用,而log4j-core-...

    log4j使用实例.zip

    Log4j可以方便地与其他Java框架集成,如Spring框架,通过配置可以在Spring Bean中直接使用Logger。 通过这个"log4j使用实例.zip"压缩包,你可以学习到如何配置和使用Log4j进行日志记录,从而更好地理解和掌握Java...

    Log4j2 web demo (log4j2 version 2.1)

    Log4j2允许你基于MDC(Mapped Diagnostic Context)或NDC(Nested Diagnostic Context)进行日志过滤。例如,你可以添加一个MDC键值对来区分不同的用户请求: ```java MDC.put("userId", "123456"); // 记录日志 ...

Global site tag (gtag.js) - Google Analytics