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

satoshun

Sato Shun

Posted on February 17, 2024

ログ出力時に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

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

💖 💪 🙅 🚩
satoshun
Sato Shun

Posted on February 17, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

What was your win this week?
weeklyretro What was your win this week?

November 29, 2024

Where GitOps Meets ClickOps
devops Where GitOps Meets ClickOps

November 29, 2024

How to Use KitOps with MLflow
beginners How to Use KitOps with MLflow

November 29, 2024