Logcat — その概要、ロギングレベル、ログの操作方法

著者: IT Sectr 公開日: 2026-05-06 読了時間: 8 分

Logcatは、ADBまたはAndroid Studioの内蔵コンソールを介して利用可能な、リアルタイムでシステムメッセージやアプリケーションログを表示するためのAndroid SDKツールです。Android Developersによると、Logcatはシステムの全プロセスからメッセージを収集し、重要度レベルやタグでフィルタリングし、開発者がエラーの診断、コード実行の追跡、パフォーマンスの分析を行うことを可能にします。LogcatはAndroidアプリケーションのデバッグにおける主要な情報源です。

主要ポイント

  • Logcat — Android Studioのコンソールウィンドウで、Androidシステムログをリアルタイムで表示します
  • ログレベル — VERBOSE、DEBUG、INFO、WARN、ERROR、ASSERT — メッセージの重要度とフィルタリングしきい値を決定します
  • フィルタリングはタグ、レベル、キーワードにより、特定のアプリケーションのログを一般ストリームから分離できます
  • ADB logcat — Android Studioなしで、USBまたはWi-Fi経由でログにアクセスするためのターミナルコマンドです
  • クラッシュログ — スタックトレース付きの例外が自動的にLogcatに送られ、完全なクラッシュ診断情報を含みます

AndroidのLogcatとは

Logcatは、すべてのプロセス(Linuxカーネル、system_server、アプリケーションを含む)が特定の形式でメッセージを書き込むAndroidシステムバッファです。Android SDKに含まれるlogcatツールはこのバッファを読み取り、リアルタイムでメッセージを表示します。Android 4.1(API 16)以降、Logcatへのアクセスは制限されています:アプリケーションは自身のログのみを読み取ることができ、システムログはデバッグアクセスを持つADBを介してアクセス可能です。

Logcatメッセージには5つのフィールドがあります:日付と時刻、PID(プロセス識別子)、TID(スレッド識別子)、ログレベル、タグです。形式は固定されており、すべてのAndroidバージョンで同一です。これにより、IDEに依存せずにCI/CDパイプラインでのログフィルタリングにgrep、awk、sedユーティリティを使用できます。

ログは固定サイズのリングバッファに保存されます:main用256KB、system用256KB、events用256KB(Android 5+)です。バッファがオーバーフローすると、古いメッセージは削除されます。開発者はPROP logcat.sizeプロパティまたはデバイスの開発者オプションでバッファサイズを変更できます。

ログレベルとタグ:Logcatメッセージの構造

6つのレベルのロギングがメッセージの重要度を決定します。Androidは他のプラットフォームと同様の標準レベルを使用しますが、Logクラスに独自の定数名を持っています。適切なレベルを選択することで、ログを効率的にフィルタリングし、重要メッセージが二次的なメッセージに埋もれるのを防ぐことができます。

レベル定数目的デフォルト表示
VERBOSELog.v最大限に詳細なデバッグ情報いいえ
DEBUGLog.d開発者向けデバッグメッセージいいえ
INFOLog.iアプリケーション動作に関する情報メッセージはい
WARNLog.w潜在的な問題に関する警告はい
ERRORLog.e重大なエラーと例外はい
ASSERTLog.wtf原則として発生すべきでないエラーはい

タグ:モジュール別のメッセージ整理

タグ(tag) — メッセージのソースを識別する最大23文字の文字列です。タグとしてクラス名やモジュール名を使用することを推奨します:MainActivity、AuthManager、NetworkModuleなど。これにより、アプリケーションの特定のコンポーネントごとにログをフィルタリングできます。チーム内の一貫性のために、別ファイルにタグ定数を作成するか、クラス名に基づいて自動的にタグを挿入するTimberライブラリを使用できます。

クラッシュログと例外スタックトレース

未処理の例外が発生すると、Androidは自動的にLogcatに完全なスタックトレースを書き込み、クラス、メソッド、コード行、コールチェーンを示します。クラッシュログには、例外タイプ(NullPointerException、RuntimeException)、メッセージ、クラッシュポイントからアプリケーションのエントリポイントまでの呼び出しシーケンスが含まれます。ユーザーデバイスからのクラッシュログ分析にはFirebase Crashlyticsが使用され、難読化マップ(Android用mapping.txt)とスタックトレースを同期します。

Android StudioのLogcat:インターフェース、フィルター、検索

Android Studioは、View → Tool Windows → Logcat(Alt + 6)からアクセス可能なグラフィカルLogcatインターフェースを提供します。Logcatウィンドウはリアルタイムで更新され、接続されたデバイスのすべてのメッセージを表示し、一般ストリームから目的の情報を分離するための柔軟なフィルターを設定できます。

レベルとタグによるフィルタリング

Log Levelドロップダウンは最小レベルでメッセージをフィルタリングします:WARNを選択すると、VERBOSE、DEBUG、INFOを非表示にして警告とエラーのみ表示します。検索フィールドではメッセージテキストやタグで検索可能 — 正規表現に対応しており、パターンによるメッセージ検索に便利です。

保存済みフィルター

Saved FiltersはAndroid StudioのLogcatの強力な機能です。アプリケーションのタグ(tag:MyApp)とWARN+レベルのメッセージのみを表示するフィルターを作成できます。フィルターはセッション間で保存され、ドロップダウンリストから利用可能です。複数モジュールのプロジェクトでは、モジュールごとに個別のフィルターを作成してください。

text
# アプリケーションのログをフィルタリングするための式の例
tag:"MyApp" level:WARN # MyAppにはWARN+のみ
package:"com.mycompany" # パッケージの全ログ
-tag:"okhttp" # OkHttpのログを除外

エクスポートと分析

LogcatログはSave to Fileアイコンからテキストファイルにエクスポートできます。これはJiraのチケットに添付したり、長時間のセッションを分析するのに便利です。エクスポートされたログは任意のテキストエディタで開き、grepを適用してパターンを検索できます。フォーマット表示にはlogcat-colorユーティリティを使用してください。

ADB logcat:高度な作業のためのターミナルコマンド

ADB logcatはLogcatのコンソール版で、Android Debug Bridgeを介してアクセスできます。その主な利点は、CIサーバー、自動化スクリプト、Android Studioのないデバイスで実行できることです。ADB logcatはGUIと同じすべてのフィルターをサポートしますが、コマンドラインの柔軟性を備えています。

基本コマンド

adb logcatコマンドは引数なしでバッファ全体をリアルタイムで出力します。停止するにはCtrl+Cを使用します。-cフラグは記録開始前にバッファをクリアします — 現在のテストのログを以前のメッセージから分離する必要がある場合に便利です。-bフラグはバッファタイプを選択します:main、system、events、crash(Android 12+)。

bash
# バッファをクリアしてMyAppタグでログ記録を開始
adb logcat -c
adb logcat MyApp:D *:S

# ログをファイルに保存
adb logcat -d > logcat_dump.txt

# プロセスPIDによるフィルタリング
adb logcat --pid=12345

grepとawkによるフィルタリング

ADBとUnixユーティリティの組み合わせにより最大の柔軟性が得られます。例えば、フィルター"*:S TAG:D"はTAGタグを持つDEBUGレベル以上のメッセージのみを表示し、それ以外をすべて非表示にします。例外のみを表示するにはgrep -i exceptionを使用します。エラー頻度を分析するには、タグ列にsort | uniq -cを適用します。

CI/CDでのLogcat

CIサーバーでは、UIテスト実行中の診断情報収集にLogcatが使用されます。典型的なパイプライン:テスト実行前にバッファをクリアし、テスト実行後にログダンプをビルド成果物として保存します。テストが失敗した場合、ログから失敗がANR、未処理の例外、またはネットワークタイムアウトのいずれによって引き起こされたかを判断できます。

コードでのロギング:Log.d、Log.e、Timber

android.util.Logクラスは、Logcatにメッセージを書き込むための組み込みAPIです。Log.v、Log.d、Log.i、Log.w、Log.e、Log.wtfはタグ(文字列)とメッセージ(文字列)、またはメッセージ+Throwableを受け取ります。メッセージの書式設定にはString.formatまたはKotlinの文字列テンプレートを使用してください — ヒープに不要なオブジェクトを生成する文字列連結は避けてください。

Timberライブラリ

TimberはJake Whartonによる人気ライブラリで、組み込みLog APIの欠点を解消します。Timberはロギングを呼び出したクラス名に基づいて自動的にタグを挿入し、毎回の呼び出しでタグを渡す必要がありません。Timberは条件付きロギングもサポートしています:Releaseビルドでは、Application.onCreateの1行でTimber.vとTimber.dの呼び出しを無効にできます。

kotlin
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 組み込みLog API
        Log.d("MainActivity", "onCreate called")

        // Timber — クラス名による自動タグ
        Timber.d("onCreate called")
    }

    private fun loadData() {
        try {
            val result = fetchFromNetwork()
            Timber.i("Data loaded: $result")
        } catch (e: IOException) {
            Timber.e(e, "Failed to load data")
        }
    }
}

Release向け条件付きロギング

Releaseビルドでは、Logcatバッファの負荷を軽減し、機密情報の漏洩を防ぐために、VERBOSEおよびDEBUGログを無効にすることを推奨します。TimberはPlantingTreeを通じてこの問題を解決します:DebugフレーバーではDebugTreeが植えられ(すべてをログ記録)、ReleaseではCrashReportingTreeが植えられます(Crashlyticsを介してERRORのみをログ記録)。組み込みLog APIは条件付きロギングをサポートしていないため、開発者は各呼び出しをif(BuildConfig.DEBUG)でラップする必要があります。

よくある質問

テスト実行前にLogcatバッファをクリアする方法

テスト実行前にadb logcat -cコマンドを使用してください。または、Android StudioのLogcatウィンドウでClear Logcatボタン(ゴミ箱)をクリックします。クリアしても他のプロセスのシステムバッファには影響せず、現在の接続のみに影響します。

Logcatバッファサイズを増やす方法

バッファを2MBに増やすにはadb logcat -G 2Mを実行します。最大サイズはデバイスに依存します:Android 10+では最大16MBまで利用可能です。変更はデバイスの再起動まで維持されます。永続的な設定には、device treeのbuild.propを使用してください。

Logcatがアプリケーションのログを表示しない理由

考えられる原因:アプリケーションがReleaseモードで実行されている(Timber.v/dログが無効)、Logcatフィルターが必要なレベルを非表示にしている、または間違ったデバイスに接続している。また、Android Studioでアプリケーションのプロセスを選択しているか確認してください(system_processではありません)。

Logcatからクラッシュログを読み取る方法

FATAL EXCEPTIONを含むを見つけ、その下に完全なスタックトレースがあります。最初の行に例外タイプとメッセージが含まれ、後続の行にファイルとコード行を示す呼び出しチェーンが含まれます。すべてのログから素早く検索するにはgrep "FATAL EXCEPTION"を使用してください。

ANRとは何か、Logcatで検出する方法

ANR(Application Not Responding)は、メインスレッド(UIスレッド)が5秒以上ブロックされる状況です。Logcatでは、ANRはActivityManagerタグと「ANR in ...」というテキストを持つメッセージとして表示され、すべてのスレッドのスタックトレースが添付されます。フィルターtag:ActivityManager level:ERRORを使用してください。

まとめ

  • Logcat — ADBおよびAndroid Studioの組み込みウィンドウからアクセス可能なAndroidシステムバッファ
  • 6つのレベルのロギング(VERBOSE — ASSERT)がメッセージの重要度とフィルタリングしきい値を決定
  • タグにより、アプリケーションモジュールごとにメッセージをグループ化して迅速にフィルタリング可能
  • ADB logcatとgrep/awkの組み合わせはGUIより柔軟で、CI/CDパイプラインに適している
  • Timberはロギングを簡素化し、タグを自動挿入し、ReleaseでDebugレベルを無効化
  • クラッシュログは例外とスタックトレースとともに、クラッシュごとに自動的にLogcatに送られる
  • 保存済みフィルターによりAndroid Studioでの日常的なログ分析が高速化

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください