LoginSignup
12
9

More than 5 years have passed since last update.

Terminalで色付きadb logcat

Posted at

やりたいこと

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

///---

12
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9