DEV Community

Sato Shun
Sato Shun

Posted on

ログ出力時にLogcatからコードにジャンプ出来るようにしておくと便利かもしれない

ファイル名:行数 を出力すると、Android StudioのLogcatからジャンプすることが可能です。

Timberライブラリを使った、コード例を示します。

Timber.d("message (MediaStoreUtils.kt:125)")
Enter fullscreen mode Exit fullscreen mode

これを実行すると、次のようにLogcatに出力されます。

Image description

Android Studioの、Logcatのファイル名の部分がリンク形式になっていることが分かります。
これをクリックすると、コードにジャンプすることが出来ます。

また、このコードのように都度 ファイル名:行数 を書いてもいいのですが、次のように関数にまとめることも出来ます。

fun logd(message: String) {
  if (!BuildConfig.DEBUG) return
  val stackTrace = Thread.currentThread().getStackTrace()[3]
  Timber.d("$message (${stackTrace.fileName}:${stackTrace.lineNumber})")
}
Enter fullscreen mode Exit fullscreen mode

Timber.DebugTreeを使っているのであれば、DebugTreeを拡張しても動きます。
val newMessage のあたりをプロジェクトに合わせて修正して下さい。

Timber.plant(object : Timber.DebugTree() {
  private val fqcnIgnore = listOf(
    Timber::class.java.name,
    Timber.Forest::class.java.name,
    Timber.Tree::class.java.name,
    Timber.DebugTree::class.java.name,
  )

  private val stackTrace: StackTraceElement
    get() = Throwable().stackTrace
      .filter { it.className !in fqcnIgnore }[2]

  override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
    val newMessage = if (priority == Log.DEBUG) {
      val stackTrace = stackTrace
      "$message (${stackTrace.fileName}:${stackTrace.lineNumber})"
    } else {
      message
    }
    super.log(priority, tag, newMessage, t)
  }
})
Enter fullscreen mode Exit fullscreen mode

このログどこで出力しているんだっけ、ってなることが多い場合には検討してみて下さい🐱

Top comments (0)