2011/11/26

ログにクラス名、メソッド名、行数を表示する方法

ログにクラス名、メソッド名、ファイル行数を出力する方法です。
Throwableインスタンスを生成してスタックトレースを取得します。
パフォーマンスへの影響は大きいので、常時出力はしない方がよいです。

private void methodA() {
    dbg("test");
}

private static void dbg(String msg) {
    StackTraceElement[] stack = new Throwable().getStackTrace();
    String className = stack[1].getClassName();
    String method = stack[1].getMethodName();
    int line = stack[1].getLineNumber();
    StringBuilder buf = new StringBuilder(60);
    buf.append(msg)
        .append("[")
            // sample.package.ClassName.methodName:1234
            .append(className).append(".").append(method).append(":").append(line)
        .append("]");
    android.util.Log.d("tag", buf.toString());
}

ログメソッドの呼び出し元の情報を表示します。
# スタックトレースからの取得なので、メソッドスタックを意識する必要はあります。
下記のような出力結果になります。

11-26 07:16:43.419: E/tag(649): test[yuki.test.IncludeTestActivity.methodA:2]

以上です。