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方法,对指定的配置文件进行监控,并且可以设置检查的间隔时间。
相关推荐
LOG4J2的生产环境配置配置案例: 4.日志滚动,避免单个日志过大,可以按小时进行日志分割. <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}.log.gz" ignoreExceptions=...
此外,Log4j还支持MDC(Mapped Diagnostic Context)和NDC(Nested Diagnostic Context),这些特性可以附加上下文信息到日志记录中,对于调试多线程和分布式系统非常有用。 如果你对Log4j的具体使用还有疑问,可以...
标题提及的是"log4j-API-最新稳定版本log4j-1.2.17",这表明我们关注的是日志框架Log4j的一个特定版本,即1.2.17。Log4j是Apache软件基金会开发的一个用于Java应用程序的日志记录工具,它提供了灵活的日志记录功能,...
- `log4j-1.2.14.jar`: 这是Log4j 1.2.14版本的jar包,包含了Log4j的全部类和方法,是使用Log4j进行日志记录的核心组件。 - `commons-logging-1.0.4.jar`: 这是Apache Commons Logging库,它是Java日志API的一个抽象...
在Java项目中,引入log4j-1.2.16.jar这个jar包后,我们首先需要配置log4j的属性文件(通常为log4j.properties或log4j.xml)。配置文件中,我们可以设定日志器的级别、Appender类型及输出格式等。 例如,以下是一个...
**日志系统在软件开发中扮演着至关重要的角色,它能帮助开发者跟踪程序运行...同时,不断学习和探索log4j的高级特性,如异步日志、MDC(Mapped Diagnostic Context)等,可以进一步提升日志系统的实用性和可维护性。
### Log4J完整说明与配置解析 #### 一、Log4J简介 Log4J是Apache的一个开源项目,用于提供灵活的...此外,Log4J还提供了丰富的扩展机制,如MDC(Mapped Diagnostic Context)等功能,进一步增强了其灵活性和适应性。
MDC(Mapped Diagnostic Context)和NDC(Nested Diagnostic Context)是Log4j提供的上下文诊断工具。它们可以用来存储与线程相关的诊断信息,便于在复杂环境中追踪问题。 通过以上实例,你已经了解了Log4j的基本...
Apache Log4j 2是Java世界中广泛使用的日志记录框架之一,它的最新版本为2.4.1。Log4j 2相比其前身Log4j 1.x,提供了许多改进和新特性,使得它在性能、可配置性、可扩展性和稳定性方面有了显著提升。在本文中,我们...
5. **MDC与NDC**:Log4j-SLF4J-Impl支持Mapped Diagnostic Context (MDC) 和Nested Diagnostic Context (NDC),为日志信息添加上下文信息,有助于追踪和诊断问题。 四、集成与使用 集成Log4j-SLF4J-Impl通常涉及...
《深入解析Log4j 2.11.0源码》 Log4j,作为Java领域最常用的日志框架之一,其2.11.0版本的发布为开发者提供了更加强大、高效和灵活的日志处理能力。源码包的获取,对于开发者深入理解其工作原理、定制化需求以及...
Apache Log4j是Java平台上的一个著名日志记录框架,其2.0版本的重大更新带来了许多性能提升和功能增强。Log4j 2.0 RC1(Release Candidate 1)是该系列的一个候选版本,意味着它在正式发布之前用于测试和反馈。这个...
Log4j extras包是Log4j的一个扩展,提供了更多功能,如MDC(Mapped Diagnostic Context)、NDC(Nested Diagnostic Context)等。这些功能可以帮助开发者更好地管理日志上下文,尤其在多线程环境中非常有用。例如,...
Log4j2是Java日志记录框架的著名组件,它为开发者提供了强大的日志管理和分析功能。这个"Log4j2-2.11.1.zip"压缩包包含了该框架的2.11.1版本,这是一个稳定且广泛使用的版本。在本篇中,我们将深入探讨Log4j2的核心...
《Apache Log4j 2.11.1:Java日志框架的核心组件》 Apache Log4j 是一个广泛使用的开源日志记录框架,为Java应用程序提供了强大的日志处理能力。在2.11.1这个版本中,Log4j 继续提供高效、灵活的日志记录解决方案,...
log4j-core包含了许多功能,如异步日志记录以提高性能,丰富的Appender(例如控制台、文件、数据库、SMTP、HTTP等),Layouts(JSON、XML、Pattern、Gelf等),过滤器(基于日志级别、MDC、自定义条件等),以及...
此外,Log4j 1.2.17还支持MDC(Mapped Diagnostic Context)和NDC(Nested Diagnostic Context),这两个功能提供了上下文信息,帮助追踪问题。MDC是线程绑定的,而NDC可以嵌套,两者在调试多线程和复杂系统时特别...
Log4j2允许你基于MDC(Mapped Diagnostic Context)或NDC(Nested Diagnostic Context)进行日志过滤。例如,你可以添加一个MDC键值对来区分不同的用户请求: ```java MDC.put("userId", "123456"); // 记录日志 ...
《深入理解log4j-1.2.17:构建高效日志系统的关键》 在IT行业中,日志记录是至关重要的,它为系统监控、故障排查和性能优化提供了宝贵的线索。Apache Log4j作为Java领域中最广泛使用的日志框架之一,其1.2.17版本...