用于类级变量的log4j PatternLayout

时间:2015-10-01 22:29:22

标签: logging log4j slf4j logback log4j2

我的类在实例化时具有与之关联的Id。我希望能够记录类似于MDC / PatternLayout的对象级别信息。不确定如果我把它放在MDC中是否会起作用,因为我不知道一个线程会执行一个对象的方法。有没有办法在log4j中执行此操作?

2015-10-01 12:52:03,117 [priority="INFO", thread="ForkJoinPool-1-worker-7", myObjectId="3838901231"] com.company.projectA.classA - initialization started

在上面的例子中,myObjectId用于每个应该打印的对象,而不是在logger.info()语句中写入它。

1 个答案:

答案 0 :(得分:1)

通常,记录器最有效地声明为静态字段,如下所示:

print(r.read())

包含print(r.read())(记录器名称)的模式布局将在日志文件中显示记录器名称(在本例中为BeautifulSoup()。

一个想法是做一些不同的事情并在记录器名称中包含ID。

因此,在知道ID之前,请延迟创建记录器,然后将其创建为r.seek(0)。请注意,记录器不能再是静态字段,因为会有多个实例:每个ID一个。

然后package com.mycomp.xyz; class MyClass { private static Logger logger = LogManager.getLogger(MyClass.class); .... 模式布局转换器将包含记录器名称加上此记录器生成的所有日志语句的ID。