Electric Eelで新しくなったLogCat
本項の後半は、新しいLogCatの紹介です。
新しいLogCatの特徴
Androidアプリ開発でデバッグを行う際、LogCatは大活躍する機能です。アプリの動作において何か不具合がある場合、LogCatにて例外出力の確認などを行います。そのLogCatが刷新され、Dolphinにて試験実装されました。ただし、Dolphinでは、デフォルトのLogCatは旧来のものであり、新しいLogCatを利用する場合は切り替え処理が必要でした。これが、Electric Eelで、新しいLogCatがデフォルトとなりました。その新しいLogCatは、図11の画面となっています。
この新しいLogCatの特徴をまとめると、以下の内容になります。
- より見やすいレイアウトの採用
- 複数ウィンドウでの表示
- ビューモードの切り替えが容易
- アプリの終了でログがクリアされない
- キーバリューによる検索
以下、順に解説していきます。
より見やすいレイアウトの採用
以前のLogCatでは、一続きの文字列になっており、ログの内容を読み取るのが簡単ではありませんでした。例えば、図11の一番下のログが、以前のLogCatでは、以下のような文字列でした。
2024-01-26 12:10:25.258 5362-5438/com...oid.databindingobservablejava D/ProfileInstaller: Installing profile for com.websarva.wings.android.databindingobservablejava
この状態では、最初のログの発生日時はわかるとしても、そのほかの情報をすぐに読み取りにくいです。カラーリングに関しても、ログレベルがWARINGとERRORの場合に文字色が変わるぐらいでした。それと比べると、新しいLogCatは、図12の1〜6の表示内容ごとにセクションに分かれており、非常に見やすくなっています。
それぞれのセクション内容は、以下の通りです。
- ログ発生日時
- プロセスとスレッドID
- タグ文字列
- パッケージ名
- ログレベル
- ログ内容
複数ウィンドウでの表示
新しいLogCatは、複数のログウィンドウを表示させることができ、同一デバイスの複数のアプリ、あるいは、複数のデバイスのログを表示させることができます。これは、LogCatツールウィンドウ上部の+ボタンをクリックします。すると、図13のように新たなLogCatタブが表示され、複数のログを切り替えて確認できるようになります。
また、LogCat画面左側のアイコン(LogCatの画面サイズによってはアイコン内に格納されている)をクリックすると、[Split Right][Split Down][Close]のメニューが表示されます。このうち[Split Right]、あるいは[Split Down]を選択すると、LogCat画面が図14のように分割され、[Close]を選択すると元の1画面に戻ります。
ビューモードの切り替えが容易
画面を分割するだけではありません。画面左側のアイコンをクリックすると、ソフトラップが有効になり、図15のように、画面幅での改行表示となります。
また、アイコン(アイコン同様LogCatの画面サイズによっては アイコン内に格納されている)をクリックすると、[Standard View][Compact View][Modify View]のメニューが表示されます。このうち、[Compact View]を選択すると、図16のように、ログ発生時刻、ログレベル、ログ内容という、そのメニュー名の通りコンパクトな表示になります。
この画面は、[Standard View]を選択すると、元の画面に戻ります。また、[Modify View]のメニューから、独自の見え方を設定することも可能です。
アプリの終了でログがクリアされない
以前のLogCatでは、接続端末先で例外発生などでアプリが終了し、その後、再起動した場合、ログがクリアされていました。これが、新しいLogCatでは、クリアされず、図17のように、PROCESS ENDEDとPROCESS STARTEDの区切りが入るようになりました。これにより、終了以前の例外内容など、問題点を追跡できるようになりました。
キーバリューによる検索
新しいLogCatを紹介する本節の最後に、検索機能について紹介します。この機能が今回の新しいLogCatで一番の変化といえます。以前のLogCatでは、パッケージやログレベルなどで絞り込む場合、ドロップダウンリストから選択していました。さらに、キーワードによる絞り込み機能もあります。この複数の入力コントロールによるログの絞り込み機能を一新し、接続先デバイスを選択するドロップダウンリスト以外は、テキスト入力欄ひとつのみとなっています。このテキスト入力欄には、もちろんフリーワードを入力でき、入力されたキーワードで検索を行います。
一方、「キー:値」の形式で入力すると、該当キーでログを絞り込んで表示してくれます。例えば、デフォルトでは、「package:mine」というクエリが記述されており、この内容で絞り込まれています。このクエリは、アプリのパッケージ(キーがpackage)が現在Android Studioで開いているプロジェクト(値がmine)、というのを意味しており、実際、そのようなログのみに絞られて表示されています。このpackageキーに、例えば、com.google.android.apps.mapsのような別の値を指定すると、そのパッケージに該当するアプリのログが参照できます。
このように、新しいLogCatでは、キーに対して任意の値を指定するクエリを記述することで、そのログを絞り込んで表示してくれます。そのようなキーとして利用できるものを、表2にまとめておきます。
キー | 内容 | 例 |
tag | タグ文字列による絞り込み | tag:openglrenderer |
package | パッケージ名による絞り込み | package:com.google.android |
process | プロセス番号による絞り込み | process:9862 |
message | ログ内容による絞り込み | message:success |
level | ログレベルによる絞り込み | level:error |
age | ログ発生日時に対する絞り込み | age:3m |
ログ検索クエリ各キーの使い方
これらのキーの使い方に関して、以下簡単に補足しておきます。
-
値は一部のみの指定が可能
tag、package、process、messageに対して指定した値は、その値を含むものを検索します。例えば、表2のpackageの例では、アプリのパッケージに、com.google.android.gmsやcom.google.android.apps.messagingなどが表示されます。 -
値に正規表現の指定も可能
値部分に正規表現を利用することもできます。ただし、その場合は、キー末尾に「~」をつけます。例えば、package~:com.*.androidとすると、アプリのパッケージにcom.google.android.apps.messagingやcom.android.systemuiなどのログが表示されます。 -
値の除外指定も可能
値に対して、「含まない」を指定することもできます。ただし、その場合は、キーの前に「-」をつけます。例えば、-message:networkとすると、ログ内容にnetworkという単語を含むものを除外します。もちろん、-package~:com.*.androidのように、正規表現の「~」と併用できます。 -
levelは指定したログレベル以上のものを表示
levelキーに対しては、ログレベルを指定するため、verbose、debug、info、warn、error、assertのどれかを指定します。そして、指定したログレベル以上のものが表示されます。例えば、warnを指定すると、warn、error、assertのログレベルのものが表示されます。 -
ageは現在からどれくらいの範囲かを指定
ageは、ログ発生日時をもとに、現在からどれくらいの範囲のものを表示させるかを指定します。指定する書式は、数値と単位の組み合わせです。単位としては、秒のs、分のm、時のh、日のdの中から選びます。例えば、3mとすると、現在から3分以内に発生したログを表示します。 -
特殊なクエリ
これまで紹介したもの以外に、特殊なクエリとして、先述のpackage:mine、アプリの障害発生のログのみを表示するis:crash、例外スタックトレースのみを表示するis:stacktraceがあります。
なお、クエリ入力欄は、図18のように入力補完が利用できます。
複数のログ検索クエリ
これらの検索クエリは、もちろん、複数指定できます。その場合は、&(AND)や|(OR)、さらには、演算の優先を表す()を使って、複雑な条件を指定できます。例えば、以下のような指定が可能です。このクエリでは、パッケージが現在のプロジェクトのものであり、かつ、ログレベルがWARN以上、または、タグに「open」を含むログが表示されます。
package:mine & (level:warn | tag:open)
&や|の演算子と()を使わずに、単にクエリを列挙した場合は、違うキーの場合はANDで、同一キーの場合はORで演算されます。例えば、以下のクエリの場合は、キーが違うため、全ての条件をANDで演算した結果、すなわち、パッケージが現在のプロジェクトのものであり、かつ、ログレベルがWARN以上であり、かつ、タグに「open」を含むログが表示します。
package:mine level:warn tag:open
以下のように、同一キーが存在する場合は、そのキーをORで演算します。
package:mine message:fail message:success
この場合は、以下と同じ内容のログが表示されます。
package:mine & (message:fail | message:success)
まとめ
Android StudioのABCシリーズの新機能を紹介する本稿は、いかがでしたでしょうか。次回は、新機能リストの4以降のインスペクタやプロファイラに関して紹介します。