Android Studio の [Logcat] ウィンドウは、デバイスからのログがリアルタイムで表示されるため、アプリのデバッグに役立ちます。たとえば、Log クラスを使用してアプリに追加したメッセージ、Android で実行されているサービスからのメッセージ、ガベージ コレクションが発生したタイミングを示すシステム メッセージなどを確認できます。アプリが例外をスローしたときは、メッセージの後に、関連するスタック トレース(コード行へのリンクを含む)が表示されます。
[Logcat] ウィンドウの使い方
アプリでログメッセージを表示する手順は次のとおりです。
- Android Studio で、物理デバイスまたはエミュレータでアプリをビルドして実行します。
- メニューバーから [View] > [Tool Windows] > [Logcat] を選択します。
デフォルトでは、Logcat は最後までスクロールします。この機能をオフにするには、[Logcat] ビュー内でクリックするか、マウスホイールを使って上にスクロールします。オンに戻すには、ツールバーの最後までスクロール アイコン
をクリックします。ツールバーを使用して、Logcat をクリア、一時停止、再開することもできます。
![[Logcat] ウィンドウの UI](https://developer.android.com/static/studio/images/debug/logcat-window.png?authuser=2&hl=ja)
図 1. Logcat ではログがフォーマットされるため、タグやメッセージなどの有用な情報を簡単にスキャンして、警告やエラーなど、さまざまな種類のログを識別できます。
ログの読み方
各ログには、日付、タイムスタンプ、プロセスおよびスレッド ID、タグ、パッケージ名、優先度、関連するメッセージが含まれています。タグによって色が異なるため、ログの種類を簡単に識別できます。各ログエントリには、FATAL、ERROR、WARNING、INFO、DEBUG、VERBOSE のいずれかの優先度があります。
たとえば、次のログメッセージは優先度が DEBUG で、タグ ProfileInstaller が含まれています。
2022-12-29 04:00:18.823 30249-30321 ProfileInstaller com.google.samples.apps.sunflower D Installing profile for com.google.samples.apps.sunflower
ログビューを構成する
標準のログビューには、各ログの日付、時刻、プロセスおよびスレッド ID、タグ、パッケージ名、優先度、関連するメッセージが表示されます。デフォルトでは、ログビューにメッセージ行はラップされませんが、Logcat ツールバーからソフトラップ
オプションを使用できます。
Logcat ツールバーで Logcat フォーマット オプションの構成アイコン
をクリックすると、デフォルトの表示情報が少ないコンパクト ビューに切り替えることができます。
表示する情報の量をさらに詳細に設定するには、[Modify Views] を選択し、タイムスタンプ、タグ、プロセス ID、パッケージ名を表示するかどうかを選択します。
カラーパターンを変更する
カラーパターンを変更するには、[Android Studio] > [Settings] > [Editor] > [Color Scheme] に移動します。ログビューのカラーパターンを変更するには、[Android Logcat] を選択します。フィルタのカラーパターンを変更するには、[Logcat Filter] を選択します。
その他の構成オプション
その他の構成オプションを設定するには、[Android Studio] > [Settings] > [Tools] > [Logcat] に移動します。ここから、Logcat サイクルのバッファサイズ、新しい Logcat ウィンドウのデフォルト フィルタ、履歴から予測入力にフィルタを追加するかどうかを選択できます。
複数のウィンドウで Logcat を使用する
タブを使用すると、デバイスまたはクエリを簡単に切り替えることができます。新規タブアイコン
をクリックすると、複数の Logcat タブを作成できます。タブを右クリックすると、タブの名前変更と並べ替えができます。
また、タブ内でビューを分割すると、2 つのログのセットを簡単に比較できます。分割するには、ログビュー内で右クリックするか、ツールバーの [Split Panels] オプションをクリックして [Split Right] または [Split Down] を選択します。分割を終了するには、右クリックして [Close] を選択します。分割ごとに、固有のデバイス接続、表示オプション、クエリを設定できます。
図 2. Android Studio で [Logcat] ウィンドウを分割
Logcat ツールバーでは、ログの最後までスクロールするか、特定の行をクリックしてその行を表示したままにすることができます。
Key-Value 検索を使用してログをクエリする
Android Studio では、Key-Value 検索をメインのクエリ フィールドから直接生成できます。このクエリシステムでは、クエリの対象が正確に指定され、さらに Key-Value に基づいてログが除外されます。正規表現を使用することもできますが、クエリで正規表現に依存する必要はありません。候補を表示するには、クエリ フィールドで Ctrl+Space キーを押します。
図 3. クエリ フィールドで Ctrl + Space キーを押すと、クエリ候補のリストが表示されます。
クエリで使用できるキーの例を次に示します。
tag: ログエントリのtagフィールドに一致します。package: ロギングアプリのパッケージ名に一致します。process: ロギングアプリのプロセス名に一致します。message: ログエントリのメッセージ部分に一致します。level: 指定した重大度以上のログレベル(例:DEBUG)に一致します。age: エントリのタイムスタンプが最新である場合に一致します。値は、数値の後に時間単位を示す文字を付けて指定します。時間単位は、s(秒)、m(分)、h(時間)、d(日)です。たとえば、age: 5mを指定すると、過去 5 分間にログに記録されたメッセージのみがフィルタされます。
否定と正規表現
フィールド tag、package、message、line では、否定と正規表現一致がサポートされます。
否定を表現するには、フィールド名の前に - を付加します。たとえば、-tag:MyTag は、tag に文字列 MyTag が含まれないログエントリに一致します。
正規表現一致を表現するには、フィールド名の後に ~ を付加します(例: tag~:My.*Tag)。
否定修飾子と正規表現修飾子は組み合わせて使用できます(例: -tag~:My.*Tag)。
論理演算子とかっこ
クエリ言語では、&、|、かっこで表現される AND および OR 演算子がサポートされます。例:
(tag:foo | level:ERROR) & package:mine
通常の演算子の優先順位が適用されるため、次の
tag:foo | level:ERROR & package:mine
は、次のように評価されます。
tag:foo | (level:ERROR & package:mine)
暗黙の論理演算子
論理演算子が適用されていない場合、クエリ言語では、キーが同じで否定修飾子が付いていない複数の key-value フィルタ語句は自動的に OR として評価され、その他のすべての語句は自動的に AND として評価されます。
たとえば、
tag:foo tag:bar package:myapp
は、次のように評価されます。
(tag:foo | tag:bar) & package:myapp
一方、
tag:foo -tag:bar package:myapp
は、次のように評価されます。
tag:foo & -tag:bar & package:myapp
複数のクエリ語句が空白文字で区切られていて論理演算子がない場合は、優先度の低い AND として扱われます。たとえば、foo bar tag:bar1 | tag:bar2 という語句は 'foo bar' & (tag: bar1 | tag: bar2) と同じです。
特別なクエリ
package:mine
package キーでは、特別な値 mine がサポートされます。この特別な値は、オープンなプロジェクトに含まれる任意のパッケージ名と一致します。
level
level クエリは、ログエントリ レベルがクエリレベル以上の Logcat メッセージのログレベルに一致します。
たとえば、level:INFO は、ログレベルが INFO、WARN、ERROR、ASSERT のログエントリに一致します。レベルの大文字と小文字は区別されません。有効なレベルは、VERBOSE、DEBUG、INFO、WARN、ERROR、ASSERT です。
age
age クエリはタイムスタンプに基づいてエントリに一致します。形式は age:<number><unit> です。ここで、
<number>は整数です。<unit>は、s、m、h、d(秒、分、時間、日)のいずれかです。
次のリストで、age クエリは、値で指定された範囲内のタイムスタンプを持つログメッセージに一致します。たとえば、age:5m というクエリは、過去 5 分以内のタイムスタンプを持つエントリに一致します。
age:30s
age:5m
age:3h
age:1d
タイムスタンプは、接続されたデバイスではなく、ホストのタイムスタンプと比較されます。デバイスの時刻が正しく設定されていない場合、このクエリは想定どおりに動作しない可能性があります。
is キー
is キーは次のように使用できます。
is:crashは、アプリのクラッシュ(ネイティブまたは Java)を表すログエントリに一致します。is:stacktraceは、ログレベルに関係なく、Java スタック トレースのように見えるログエントリに一致します。
name キー
name キーを使用すると、保存したフィルタに一意の名前を付けて、フィルタ履歴のプルダウンで簡単に識別できるようになります。複数の name を指定してもエラーにはなりませんが、IDE により、クエリの最後に指定された name の値のみが使用されます。
クエリ履歴を表示する
クエリ履歴を表示するには、クエリ フィールドの横にある履歴表示アイコン
をクリックします。クエリをお気に入りに追加して、すべての Studio プロジェクトでリストの先頭に表示されるようにするには、クエリの横にあるスターをクリックします。または、name: キーを使用して、お気に入りのクエリを識別しやすくすることもできます。詳しくは、特別なクエリをご覧ください。

図 4. クエリをお気に入りに追加するには、その横にあるスターをクリックします。
アプリのクラッシュと再起動をまたいでログを追跡する
Logcat は、アプリプロセスが停止して再起動されたことを検出すると、PROCESS ENDED や PROCESS STARTED などのメッセージを出力に表示します。Logcat を再開すると、タブ分割、フィルタ、表示オプションなどのセッション構成が保持されるため、セッションを容易に続行できます。
![アプリのクラッシュを示す [Logcat] ウィンドウ](https://developer.android.com/static/studio/images/debug/logcat-track-crashes.png?authuser=2&hl=ja)
図 5. アプリプロセスが再起動されると、Logcat はプロセスが終了し、その後開始されたことを示すメッセージを出力します。