有什么方法可以让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
中的基本实现,但通常在子类中将其覆盖。这可以解释您所看到的任何差异。我希望这有帮助。