【发布时间】:2015-10-01 22:29:21
【问题描述】:
我的类在实例化时有一个与之关联的 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() 语句中。
【问题讨论】:
-
请澄清:您希望何时记录该 ID?只有当对象被实例化时?对于与该对象关联的所有日志语句?您何时不想记录该 ID?
-
Id 在 init() 被调用后可用,所以在那之后我想在所有日志记录语句中打印 id。如果 id 不可用,则可以打印空字符串。
-
编辑:我只想在类中编写的那些语句中记录 Id。课堂外的任何陈述都不应打印。这几乎就像用类名初始化一个记录器,这样类中的所有语句都将打印该类名,但如果它可用,也会连同 id 一起打印。获得 MDC/PatternLayout 的灵活性会很好。在调用 init() 后 ID 可用,因此在那之后我想在所有日志记录语句中打印 id。如果 id 不可用,则可以打印空字符串。
标签: logging log4j slf4j logback log4j2