1

JavaまたはLogbackを取得して、スタックトレースおよびログ呼び出しでオブジェクトID(またはアドレスなど)を取得する方法はありますか?言い換えれば、これの代わりに:

com.example.MyObject

私のスタックトレースでは、これが必要です:

com.example.MyObject@123456

そしてロギングのために、私はこれが欲しいです:

LOG.debug("A message");

このように行動するには:

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

StackTraceElementLogbackとjava自体の両方がsを使用しているようであり、これらはこの情報を記録していないため、これを行う方法はわかりません。

ボーナスポイントについては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 に答える