有什么方法可以让Java或Logback在堆栈跟踪和日志调用中为我提供对象ID(或地址等)。换句话说,代替此:

com.example.MyObject


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

com.example.MyObject@123456


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

LOG.debug("A message");


像这样:

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


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

对于奖励积分,如何在dalvik中实施Object.toString()?通用的Java文档说它是toHex(Object.hashCode()),但我对此进行了测试,但不匹配。

最佳答案

如您所述,堆栈跟踪本身并不在每个帧中包含对this的引用。该信息可用于调试器。可能有一种骇人听闻的方式来获取您想要的信息,但是它会很丑,很慢,而且可能很不稳定。老实说,我不会打扰。


  对于奖励积分,如何在dalvik中实施Object.toString()


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

从那里:

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


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

我希望这有帮助。

10-07 12:57
查看更多