gpt4 book ai didi

java - 在java中打印logback日志或stacktrace中的对象ID

转载 作者:行者123 更新时间:2023-12-01 05:01:01 25 4
gpt4 key购买 nike

有没有办法让 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 的引用。不过,调试器可以使用该信息。可能有一种奇怪的方法可以获取你想要的信息,但它会很丑陋、缓慢,而且可能不稳定。老实说,我不会打扰。

For bonus points, how is Object.toString() implemented in dalvik?

这是(类似于)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 中的基本实现,但它通常在子类中被重写。这可以解释您可能看到的任何差异。

我希望这会有所帮助。

关于java - 在java中打印logback日志或stacktrace中的对象ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13378619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com