1

有什么方法可以让 Java 或Logback在堆栈跟踪和日志调用中为我提供对象 ID(或地址或其他)。换句话说,而不是这样:

com.example.MyObject

在我的堆栈跟踪中,我想要这个:

com.example.MyObject@123456

对于日志记录,我想要这个:

LOG.debug("A message");

像这样行事:

LOG.debug(this + ": A message");

不过我看不到这样做的方法,因为 Logback 和 java 本身似乎都使用StackTraceElements,而那些不记录此信息。

对于奖励积分,Object.toString()dalvik是如何实现的?通用的 java 文档说它是,toHex(Object.hashCode())但我测试了它并且它不匹配。

4

1 回答 1

0

正如您所注意到的,堆栈跟踪本身不包含对this每一帧中的引用。但是,该信息用于调试器。可能有一种获取您想要的信息的黑客方法,但它会很丑陋、缓慢,而且可能很不稳定。老实说,我不会打扰。

对于奖励积分,Object.toString()dalvik是如何实现的?

这是(类似的)树尖Object.javahttps ://android.googlesource.com/platform/libcore/+/bcf0a81a927992883f0cb49c1c945141d1261b8b/luni/src/main/java/java/lang/Object.java

从那里:

public String toString() {
    return getClass().getName() + '@' + Integer.toHexString(hashCode());
}

请注意,这是类中的基本实现Object,但它通常在子类中被覆盖。这可以解释您可能看到的任何差异。

我希望这有帮助。

于 2012-11-15T19:50:07.003 回答