やりたいこと
Eclipse / Android StudioのようなLog Levelごとに色がついているadb logcatをLinuxのTerminal上でも実現したい.
IDE上のlogcat表示だとエリアも小さいし,操作もしづらいので,別WindowのTerminal上で同様のことをしたい.
2010年ごろに先輩に教えてもらって,カスタムしながらいまでも現役で使っているscriptです.
Code
shell script
#!/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
#!/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と合わせて確認するときなど便利です.
///---