Posted at

Terminalで色付きadb logcat

More than 1 year has passed since last update.


やりたいこと

Eclipse / Android StudioのようなLog Levelごとに色がついているadb logcatをLinuxのTerminal上でも実現したい.

IDE上のlogcat表示だとエリアも小さいし,操作もしづらいので,別WindowのTerminal上で同様のことをしたい.

2010年ごろに先輩に教えてもらって,カスタムしながらいまでも現役で使っているscriptです.


Code


shell script


logcat.sh

#!/bin/sh

while true; do
adb logcat -v time | logcat_color.awk
echo "#### DEVICE DISCONNECTED !"
done


adb logcatの出力をlogcat_color.awkに渡し続けています.

USBが切断されたときもメッセージを出して接続待ち状態になります.

CTRL+C で終了.


awk


logcat_color.awk

#!/usr/bin/awk -f

# adb logcat -v time
/^.* V\/.*$/ { print "\033[0m" $0 }
/^.* D\/.*$/ { print "\033[0;34m" $0 "\033[0m" }
/^.* I\/.*$/ { print "\033[0;32m" $0 "\033[0m" }
/^.* W\/.*$/ { print "\033[0;31m" $0 "\033[0m" }
/^.* E\/.*$/ { print "\033[1;31m" $0 "\033[0m" }


Log Level(V, D, I, W, E)を判定して,Text Styleを指定してprintしています.

//の間がawkの正規表現で,下記の文法を使って各Log Levelを判定しています.

"^"     : 行頭

".*" : 何かの文字が復数個
" E\/" : " E/" の存在判定
".*" : 何かの文字が複数個
"$" : 文字列終端

上の例はadb logcat -v timeの出力用で,logcatのoption次第で判定文はカスタム必要です.

{ print xxx } の部分が実際にTerminal上に表示するところで,各Log Levelごとに下記のstyleとcolorを指定しています.

ESC[<色コード>m  : これ以降のstyleとcolor指定

print "\033[<色コード変える>m" $0 "\033[<色コード戻す>m"
("\033" = ESC)

\033[0m : Default
\033[0;34m : Blue
\033[0;32m : Green
\033[0;31m : Red
\033[1;31m : Bold Red


Logcat出力

上の2つのファイルにPathを通して,Terminalで

$ logcat.sh

を実行すると,下記のような出力になります.Log Levelごとに色が分かれててわかりやすいです.

開発中の一時LogなどをError Levelで出力して,まわりのLogと合わせて確認するときなど便利です.

screenshot.png

///---