【发布时间】:2018-08-16 07:09:30
【问题描述】:
我正在尝试使用 Log4j2 记录 Java 程序的某些类实例的方法调用链。每个实例的行为会根据它们接收的输入而有所不同(显然)。
我面临的问题是区分每个实例的日志消息,以便轻松重建我正在谈论的方法调用链。 除了记录每个方法的进入和离开,这是我使用的默认记录模式,我还尝试过:
- 在日志中添加方法调用参数:信息太少,可读性差;
- 添加有关方法行为的更多信息:过于冗长且可读性差;
- 向所有日志消息添加实例哈希码,这将变成类似
LOG.trace("{} - Leaving constructor(index:{})", System.identityHashCode(this), index);:很好的解决方案,但我必须向所有日志方法添加一些样板代码,这会使代码的可读性降低; - 使用每个实例的记录器(所以不是每个类/静态的记录器)并在记录器名称中添加实例哈希码(所以记录器名称将是
Classname@hashcode):似乎是干净代码术语中的最佳解决方案,但我没有找到任何方法为多个 loggere 声明记录器设置(如记录阈值),即所有名称以Classname开头的记录器。
您认为哪一个是最好的解决方案,或者您有其他建议吗?
【问题讨论】:
-
如果你把它设为
Classname.hashcode而不是Classname@hashcode,log4j 将采用与package.class相同的方式,因此你应该能够在Classname上设置日志记录属性并让实例继承它们。 -
虽然这是一种解决方法,但它就像一个魅力!谢谢!只是要知道:我正在使用像
ClassName.@hashCode这样的记录器名称。
标签: java logging log4j2 code-readability