AndroidのLogCatのTagにクラス名、メソッド名、行番号を表示するクラス

たとえデバッカがあってステップ実行が出来ようとも、デバックログの手軽さは手放せません。Androidの場合、標準のLogクラスを使えば、その目的を達成できるのですが、できたらTagに、クラス名、メソッド名、行番号が出たら嬉しいと思う人が多いはず!

と思ってぐぐってみたら、実現している方がいました。

[

AndroidのLogCatのTagで「クラス名.メソッド名:行番号」と表示するには?

](http://kinsentansa.blogspot.jp/2012/06/androidlogcattag.html)

せっかくなんで、これを即使えるようにクラス化してみました。

[code lang=“java” light=“true”] package jp.fuga.hoge.android.app;

import java.util.regex.Pattern; import jp.fuga.hoge.android.app.BuildConfig; import android.util.Log;

/** * ログ出力クラス。
* ログを出力する場合には必ず本クラスを使用すること。
* リリース時には、デバックログを出力しないよう設定される。 * */ public class L {

/**
 * デバック用ログを出力する。 本番リリース時は出力されない。
 * 
 * @param msg 出力するメッセージ
 */
public static void d(String msg) {
    if (!BuildConfig.DEBUG) return;
    Log.d(getTag(), msg);
}

/**
 * エラー用ログを出力する。 <br>
 * catchの中や想定外の動作でログを出力する場合に使用すること。<br>
 * 本番リリース時も、起きたエラーを解析するために本ログは出力される想定。
 * 
 * @param msg 出力するメッセージ
 */
public static void e(String msg) {
    Log.e(getTag(), msg);
}

/**
 * 同上
 * 
 * @param msg
 * @param t
 */
public static void e(String msg, Throwable t) {
    Log.e(getTag(), msg, t);
}

/**
 * タグを生成する
 * 
 * @return className#methodName:line
 */
private static String getTag() {

    final StackTraceElement trace = Thread.currentThread().getStackTrace()[4];
    final String cla = trace.getClassName();
    Pattern pattern = Pattern.compile("[\\.]+");
    final String[] splitedStr = pattern.split(cla);
    final String simpleClass = splitedStr[splitedStr.length - 1];

    final String mthd = trace.getMethodName();
    final int line = trace.getLineNumber();
    final String tag = simpleClass + "#" + mthd + ":" + line;

    return tag;
}

}

[/code]

BuildConfigでリリースビルド時にデバックログが出力されないよう制御しているのがポイント。

使い方はこんだけ

[code lang=“java” light=“true”] L.d(“デバックログです”); [/code]

では良いデバックライフを。