在多线程环境下,我们可能需要输出很多信息,每个线程产生的日志信息可能都是类似的,我们如何区分出哪些信息是同一个线程输出的呢?其实log4j已经提供了多种实现方式:
1.使用PatternLayout,在设定输出格式的时候增加%t参数,这样会输出各个线程的线程名称,这样我们就可以根据线程名称区分哪些内容是同一个线程输出出来的。
2.使用NDC,也是基于PatternLayout,在设定输出格式的时候增加%x参数,不过需要再代码中增加相关内容,再线程开始的时候,调用 NDC.push("标识信息");在这之后,所有的输出的日志内容%x的位置都会输出指定的"标识信息",这样也能区分开不同线程输出的内容,NDC内 部是各堆栈实现的,所以可以多次调用push方法加入"标识信息",然后调用pop方法"弹出"当前表示信息,使上一个标识信息可用,最后,载线程处理结 束先,要再次调用NDC.remove();方法,清空堆栈信息。
3.使用MDC,和NDC类似,都是基于PatternLayout,的,需要使用%X{paramName}参数(注意MDC使用大写 'X',NDC使用小写'x'),不过MDC可以同时指定多个%X,例如:%X{param1} %X{param2},在程序中处理的时候也需要代码配合,开始的时候需要调用MDC.put(String key,Object