ここで紹介しているログ出力クラスの名前がスタックトレースに出現するまでスタックトレースを最後から最初に向かって遡って行きます。出現したその一つ手前のスタックが目的のスタックです。そこから、呼び出し元のクラス名、メソッド名、行番号を取得しています。
Debug.java
import android.util.Log;
public class Debug {
static String m_selfClassName;
static {
m_selfClassName = Debug.class.getName();
}
public static void print() {
Log.d(getPlace(), "-");
}
public static void print(String text) {
Log.d(getPlace(), text);
}
private static String getPlace() {
StackTraceElement[] trace = Thread.currentThread().getStackTrace();
int length = trace.length;
String className = "";
String methodName = "";
int lineNumber = 0;
for (int j = length - 1; j > -1; j--) {
String tempClassName = trace[j].getClassName();
if (tempClassName.equals(m_selfClassName)) {
String name = trace[j + 1].getClassName();
String[] arr = name.split("\\.");
className = arr[1] + "." + arr[2];
methodName = trace[j + 1].getMethodName();
lineNumber = trace[j + 1].getLineNumber();
break;
}
}
return String.format("%-40s %-25s===>", className + "(" + String.valueOf(lineNumber) + ")", methodName);
}
}