NDC.pop(); //从堆栈中移除信息,但移除的只是最后的信息 log.debug(\
NDC.pop(); //再次从堆栈中移除信息 log.debug(\ log.debug(\
这里格式化输出信息使用的是 TTCCLayout,还记得其setContextPrinting方法吗?程序运行后,从输出的信息就可以看到效果了。此外,NDC还提供了其他方法:
(1)get,获取堆栈中的全部信息。以上例为例,当输出Test2时,使用该方法会获得\。 (2)peek,获取堆栈中最后的信息。仍以上例为例,当输出Test1时会获得\,Test2时为\,而当输出Test3时由于\已被移除,\又成了最后的信息,因此获得的仍是\。 (3)clear,清空堆栈中的全部信息。
(4)setMaxDepth,设置堆栈的最大深度,即当前的信息可以保留多少,对之后追加的信息没有影响。当需要一次清掉多条信息时,使用setMaxDepth会比多次调用pop方便。 2.org.apache.log4j.MDC。 MDC是Mapped Diagnostic Context的简写,意为映射诊断环境,提供了一个Map对象来保存信息。Map对象使用Key、Value的形式保存值。 示例代码:
PatternLayout layout = new PatternLayout(\ ConsoleAppender appender = new ConsoleAppender(layout); Logger log = Logger.getLogger(Test.class); log.addAppender(appender);
log.debug(\ //添加信息到Map中
MDC.put(\ MDC.put(\ log.debug(\
//添加信息到Map中,若Key重复,则覆盖之前的值 MDC.put(\ MDC.put(\ log.debug(\
//将信息从Map中移除,此时信息不再输出 MDC.remove(\ MDC.remove(\ log.debug(\
这个示例演示了MDC的基本用法,格式化信息用的也是PatternLayout,模式字符为\,其格式必须为\。其中Key就是向 Map对象添加信息时put方法所用的Key,这里为name和ip。由于可以使用\输出信息,因此MDC使用起来会比NDC更灵活。此外,MDC还提供了get方法来获取指定Key的信息。 六、小结
用了近半个月,终于大概掌握了Log4J。由于本文是边学边写的,目的是将Log4J的
用法记录下来,而非提供一份中文参考,因此内容并不细致,但尽量提供了示例。不过到最后才发现,示例存在问题,其实Logger做为类的static成员比较恰当,而我为了图方便,竟直接写到了main方法中,这一点还请注意。
此外,这里再推荐一下《The Complete log4j Manual》,是对Log4J较详细的介绍,在网上可以找到,只不过是英文的。