はじめに
こんにちは。
今日はJetpack Composeのログについて書こうと思います。Viewを使用していた時はピュアなandroid.util
で事足りていましたが、Jetpack Composeでは基本Composable関数単位でログのタグを出力したいと思い調べてみました。
約二年Androidエンジニアをしていますが、Timber初めて使ってみました。ふふふ。
どうするの?
Timberというログ出力ライブラリを使用します。実際はandroid.util
をラップした軽量のライブラリだそうです。Timberについて詳しく知りたい人はこちらを覗いてみてください。
やることは以下です。
-
Timber.DebugTreeを継承したクラスを作り、自分好みにカスタマイズ!
-
Applicationクラスにて(1)で作成したクラスを初期化する。
-
Timber.DebugTreeを継承したクラスを作り、自分好みにカスタマイズ!
class TimberSetting(
private val context: Context
): Timber.DebugTree() {
// 引数のtagはcreateStacElementTagで作成したもの
// ユニークなTAGを入れておくと、自アプリのログだけでfileterできる。
override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
super.log(priority, "YOUR_UNIQUE_TAG" + tag, message, t)
}
// TAGを生成する。引数のelementからファイル名や行数などを取得できる。
override fun createStackElementTag(element: StackTraceElement): String {
return String.format(" [C:%s] [L:%s] [M:%s]",
super.createStackElementTag(element),
element.lineNumber,
element.methodName)
}
}
- Applicationクラスにて(1)で作成したクラスを初期化する。
// AndoridManifest.xmlへの追加を忘れずに!
class MyApplication: Application() {
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) {
Timber.plant(TimberSetting(this))
}
}
}
以上の実装で以下のようなログが出力されます。
@Composable
fun Main() {
Timber.i("Main Composable!") //20行目
}
I/YOUR_UNIQUE_TAG [C:MainActivityKt] [L:20] [M:Main]: Main Composable!
さいごに
Jetpack ComposeでTimberを使ってみました。いや、これJetpack Composeじゃなくても良かったじゃん。とはいえメソッド名出せるの良いですね。もっと前から使っておけば良かった~。
以上です。それではまた次の記事で!
参考
[stack overflowの質問](Log method name and line number in Timber)