区分同一个class的多个实例的日志信息
Differentiate logging informations of multiple instances of the same class
我正在尝试使用 Log4j2 记录 类 程序的某些 类 实例的方法调用链。每个实例的行为都会根据它们将收到的输入而有所不同(很明显)。
我面临的问题是区分每个实例的日志消息,以便轻松重建我正在谈论的方法调用链。
除了记录每个方法的进入和离开(这是我使用的默认记录模式)之外,我还尝试:
- 在日志中添加方法调用参数:信息太少,可读性差;
- 添加有关方法行为的更多信息:过于冗长且可读性差;
- 将实例哈希代码添加到所有日志消息中,这将变成类似
LOG.trace("{} - Leaving constructor(index:{})", System.identityHashCode(this), index);
:很好的解决方案,但我必须将一些样板代码添加到所有日志记录方法中,这使得代码有点可读性较差;
- 使用每个实例的记录器(所以不是 per-class/static 一个)并在记录器名称中添加实例哈希码(因此记录器名称将是
Classname@hashcode
):似乎是最好的解决方案干净的代码术语,但我没有找到任何方法来为多个 loggere 声明记录器设置(如记录阈值),即对于名称以 Classname
. 开头的所有记录器
您认为哪一个是最好的解决方案,或者您还有其他建议吗?
对于此要求,您可以轻松地使用嵌套线程上下文:查看 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();
我正在尝试使用 Log4j2 记录 类 程序的某些 类 实例的方法调用链。每个实例的行为都会根据它们将收到的输入而有所不同(很明显)。
我面临的问题是区分每个实例的日志消息,以便轻松重建我正在谈论的方法调用链。 除了记录每个方法的进入和离开(这是我使用的默认记录模式)之外,我还尝试:
- 在日志中添加方法调用参数:信息太少,可读性差;
- 添加有关方法行为的更多信息:过于冗长且可读性差;
- 将实例哈希代码添加到所有日志消息中,这将变成类似
LOG.trace("{} - Leaving constructor(index:{})", System.identityHashCode(this), index);
:很好的解决方案,但我必须将一些样板代码添加到所有日志记录方法中,这使得代码有点可读性较差; - 使用每个实例的记录器(所以不是 per-class/static 一个)并在记录器名称中添加实例哈希码(因此记录器名称将是
Classname@hashcode
):似乎是最好的解决方案干净的代码术语,但我没有找到任何方法来为多个 loggere 声明记录器设置(如记录阈值),即对于名称以Classname
. 开头的所有记录器
您认为哪一个是最好的解决方案,或者您还有其他建议吗?
对于此要求,您可以轻松地使用嵌套线程上下文:查看 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();