区分同一类的多个实例的日志记录信息

时间:2018-08-16 07:09:31

标签: java logging log4j2 code-readability

我正在尝试使用Log4j2记录Java程序的某些类实例的方法调用链。每个实例(显然)都会根据输入的行为而有所不同。

我面临的问题是区分每个实例的日志记录消息,以轻松地重构我所讨论的方法调用链。 除了记录每个方法的进入和离开(这是我使用的默认日志记录模式)之外,我还尝试过:

  1. 在日志中添加方法调用参数:信息太少且不易读;
  2. 添加有关该方法行为的更多信息:太冗长且不太可读;
  3. 将实例哈希代码添加到所有日志记录消息中,这将类似于LOG.trace("{} - Leaving constructor(index:{})", System.identityHashCode(this), index);:这是一个很好的解决方案,但是我必须在所有日志记录方法中添加一些样板代码,这会使代码的可读性降低;
  4. 使用按实例记录器(而不是按类/静态记录器),并在记录器名称中添加实例哈希码(因此记录器名称为Classname@hashcode):似乎是干净代码中的最佳解决方案术语,但是我没有发现任何方法来声明多个记录器的记录器设置(例如记录阈值),即,所有名称以Classname开头的记录器。

您认为哪个是最佳解决方案,或者您还有其他建议的方法?

1 个答案:

答案 0 :(得分:0)

为此,您可以轻松地使用嵌套线程上下文:查看https://logging.apache.org/log4j/2.x/manual/thread-context.html中的“ Fish Tagging”。

节选:

ThreadContext.push(UUID.randomUUID().toString()); // Add the fishtag;

logger.debug("Message 1");
.
.
.
logger.debug("Message 2");
.
.
ThreadContext.pop();