Androidアプリ開発でバグを追うときに使用するのが Logcat。しかし、「ログのどこを見ればいいのか分からない」「出力が多すぎて追えない」感じることもあります。Logcatの使い方の基礎をメモします。
ログの出力方法
android.util.Log クラスを使用します。 Kotlin / Java どちらでも同様の使い方が可能です。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.v("MainActivity", "一番詳細")
Log.d("MainActivity", "開発時によく使う")
Log.i("MainActivity", "一般情報")
Log.w("MainActivity", "警告")
Log.e("MainActivity", "エラー")
}
}
| メソッド | ログレベル | 用途 |
|---|---|---|
Log.v() |
Verbose | 最も詳細なログ(通常は非表示) |
Log.d() |
Debug | 開発中の動作確認 |
Log.i() |
Info | 通常の情報出力 |
Log.w() |
Warn | 警告(想定外の挙動) |
Log.e() |
Error | 重大なエラー発生時 |
Logcatウィンドウの使い方
Android Studioの側面にあるLogcaタブを開くとログが表示されます。表示量が多いため、フィルタ設定を行う必要があります。左上の「Show only selected application」をONにすると、 現在のアプリから出たログだけが表示されます。
検索バーで絞り込み
検索バーから Verbose / Debug / Info / Warn / Error を切り替えて見たい重要度だけを表示します。
検索バーにキーワードを入力すると、メッセージ内容やタグで絞り込みできます。
独自のLogsユーティリティを作る
複数ファイルで同じようにLog.d()を使うと管理が煩雑になります。共通クラスを作ってまとめるのがおすすめです。下記コードはログがデバッグモードでのみ表示されるので、誤ってリリースビルドで出力される心配がないです。
object Logs {
private const val TAG = "MyApp"
fun d(msg: String) {
if (BuildConfig.DEBUG) Log.d(TAG, msg)
}
fun e(msg: String, tr: Throwable? = null) {
Log.e(TAG, msg, tr)
}
}
使用例:
Logs.d("ボタンがクリックされました")
Logs.e("通信エラー")
Logcatを理解すれば、アプリの内部の不具合の原因を発見できます。クラッシュの原因や処理の流れを正確に追えるようになれば、デバッグ速度が上がります。