AndroidでLog.d(TAG, "some log text...")
という書き方でログを出力することができますが、毎回TAG
変数を宣言するのがめんどくさかったので、呼び出し元に応じて自動的にファイル名や行番号を取得してTAG
を設定してくれたら便利なのになーと思っていました。**できました。**テキトーにクラスを作り、以下のようなメソッドを作成します。仮にLogger
クラスとしましょう。
Logger.java
public class Logger {
public static void log(String text) {
StackTraceElement elem = Thread.currentThread().getStackTrace()[2];
String tag = elem.getFileName();
Log.d(tag, text);
}
}
そして、ログを吐き出したいところでこのメソッドを呼びます。
Logger.log("hello world");
出力例
09-15 19:52:03.270 15378-15378/com.niusounds.myapps D/MainActivity.java: hello world
かんたん!!
ちなみに同じコードをKotlinから呼び出したら違う結果になりました。Kotlinの場合はThread.currentThread().stackTrace[3]
を取得しないといけないようです。
Log.kt
fun log(text: String) {
val caller = Thread.currentThread().stackTrace[3]
val tag = "${caller.fileName}:${caller.lineNumber}"
Log.d(tag, text)
}