道を歩いていてネコに出会ったとしたら、得した気持ちになるときがあるでしょう。自分は30分千円のネコカフェに入って猫が寄ってきてくれずに眺めるだけで終わって涙ちょちょ切れた経験があります。
そんな自分が Android 開発案件に入って出会ったのが「Logcat」。
かわいげがあるとは言いにくいものの、(ログを)吐き続けてくれる、ある種の優秀な猫です。
Logcatとは
「Logcat」とは、Androidシステムとアプリのログをリアルタイムで確認するためのツールで、Android公式ドキュメントでは下記のように記載されています。
Logcat は Log クラスを使用してアプリから作成したメッセージなど、システム メッセージのログをダンプするコマンドライン ツールです。
『Logcat コマンドライン ツール』 by Android デベロッパー)
(超小声)「ダンプする」とは
恥ずかしながら、正直これまで「Dump」という言葉に馴染みがありませんでした。
しかし、沢山のログデータ・生データとお友達の界隈では「ダンプ」がよく出てきます。「ダンプカー」などは聞いたことがあったものの、「ダンプカー」自体の機能を自分は知りませんでした。()
そしてこういう時のわわわ辞典なのであります...。
ダンプ(英:dump)とは
見たい内容をファイルとかに「ぐへぇ(-O-)=3」と吐き出すこと
です。
『ダンプ』by 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
「ぐへぇー」は流石に分かり易すぎます。
(そもそも)ダンプカーとは
土砂ダンプとは主に木工・建設現場で活躍し、土砂や砕石などを運搬します。
荷台を傾けることにより、積荷を降ろすことができます。
『トラックとダンプの違いを詳しく解説します!』by 株式会社シマ商会
ダンプカー=「傾けて流せる系のものを積んでいる車」と認識して良さそうです。
Logcatで取得できる内容
さて本題の「Logcatで取得できるログ」について。
Logcatでは、アプリやシステムサービスなどユーザ空間で発生するログ(main / system / radio / events / crash)が取得できます。
結合テストや障害調査で必要になる情報は、基本的にここで確認できます。
自分の現場では、主にテストのエビデンスとしてLogcatのログを使用していました。(バグなどが出た際に、Logcatが懇切丁寧にcrash箇所・時刻等を記録してくれるため。)
Android Studio(IDE) を使用する場合、GUIの [Logcat] タブ から同じ内容を確認可能です。
複数バッファの取得や低レイヤの解析など、より高度な解析の場面でCLIを使用するイメージです。
ユーザー空間ログ VS カーネルログ
前述の通りLogcatは、「ユーザ空間で発生するログを取得できるこまんどです。
「ユーザー空間ログ」と「カーネルログ」の層の違いについて、まとめていきたいと思います。
ユーザー空間ログ
アプリ・サービス・システムプロセス(ActivityManager や SystemServer など)の出力を監視するログです。
各プロセスから送信されるログは「logd」デーモンによって集約され、バッファに格納されます。
→adb logcat で取得可能な空間。
カーネルログ
Linuxカーネル(Androidの最下層)のイベントを記録します。
「/proc/kmsg」というカーネルリングバッファに書き込まれ、デバイスドライバや低レイヤのハード状態を監視します。
なかなか、Androidのログ空間についての資料を漁っても出てこなかったのですが、Linuxカーネル空間について図示してくれていたサイトを見つけたので、リンクを貼ることで終幕としたいと思います。
adb shell dmesg や cat /proc/kmsg で参照できるが、通常のユーザ端末では root やエンジニアビルドが必要な場合が多し。(?)
→開発者モードにしたとて権限等がないと触れられないイメージ。
Logcatの基本コマンド(ΦωΦ)
デフォルト
Androidのログシステム(logd)からリアルタイムで吐かれる全ログを標準出力に流すコマンドです。
adb logcat
スレッドIDと時刻を付きでファイルに出力(log.txt)
adb logcat -v threadtime > log.txt
全バッファまとめて取得する
adb logcat -b all -v threadtime > crash_log.txt
-b allは、main / radio / events / crash など全バッファをまとめて出すオプションです。
低レイヤの機能試験や障害解析だと、主にこの「-b all」をつけるイメージです。
logcat=スマホの独り言を可視化する装置?
スマホは常に独り言を出し続けていて、Logcatは、それを拾い続けてくれるという事実に気づきました。
JavaのTomcatやcatコマンド、GitのキャラクターやQiitaのキャラクター然りなぜこんなに猫が使われているのかの理由についても調べたくなりました。
参考
