我正在尝试使用Log4j2记录Java程序的某些类实例的方法调用链。每个实例(显然)都会根据输入的行为而有所不同。
我面临的问题是区分每个实例的日志记录消息,以轻松地重构我所讨论的方法调用链。 除了记录每个方法的进入和离开(这是我使用的默认日志记录模式)之外,我还尝试过:
LOG.trace("{} - Leaving constructor(index:{})", System.identityHashCode(this), index);
:这是一个很好的解决方案,但是我必须在所有日志记录方法中添加一些样板代码,这会使代码的可读性降低; Classname@hashcode
):似乎是干净代码中的最佳解决方案术语,但是我没有发现任何方法来声明多个记录器的记录器设置(例如记录阈值),即,所有名称以Classname
开头的记录器。您认为哪个是最佳解决方案,或者您还有其他建议的方法?
答案 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();