【问题标题】:Print object ids in logback log or stacktrace in java在 logback 日志或 java 中的堆栈跟踪中打印对象 ID
【发布时间】:2012-11-14 12:13:02
【问题描述】:

有什么方法可以让 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()),但我测试过它不匹配。

【问题讨论】:

    标签: java debugging stack-trace logback dalvik


    【解决方案1】:

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

    对于加分,Object.toString() 在 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 类中的基本实现,但它通常在子类中被覆盖。这可以解释您可能看到的任何差异。

    我希望这会有所帮助。

    【讨论】:

    • 嗯,很奇怪,我用普通的 ObjectInteger.toHexString(hashCode()) 进行了测试,但我没有得到相同的值......哦,好吧。我想我会放弃并在我所有的调试语句中添加+ this
    猜你喜欢
    • 2012-04-19
    • 2015-07-01
    • 1970-01-01
    • 2023-01-20
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    相关资源
    最近更新 更多