Go言語でlogcatfというコマンドラインツールを作った

https://raw.githubusercontent.com/ujiro99/logcatf/master/screenshot.png

Logcatの出力を指定したフォーマットや色に変換するツールを作った。

github.com

今の仕事でLogcatを頻繁に見たり解析する必要があり、簡単に出力フォーマットを変換するツールが欲しかったというのが動機。 以下のコマンドを叩くと、上記スクリーンショットのような表示になる。

$ adb logcat -v time | logcatf --color

LogcatをカラフルにしたりParseするツールとしては、PythonCoffeeScriptで実装されたものが既に幾つか存在する。

しかし、Windowsで使おうとすると実行環境のセットアップが必要で、敷居が高かった。 そこでクロスコンパイルが容易と思われたGolangを使って開発した。 loganalysisについては何ができるか良くわかっていない。

インストール

以下のページからバイナリ配布している。

Github Release

実装について

  • 実装としては、Logcatをparseしたあと、引数で与えられたフォーマット文字列をfprintf関数へ渡してフォーマット結果として出力している。 CSV出力には標準パッケージとして提供されるencoding/csvを使った。

  • Githubの見栄えが良くなるよう色付けにも対応してみた。この機能には、このツールとの相性が良いと思われたmitchellh/colorstringを使っている。フォーマット文字列中にcolorstringのタグを埋め込めるため、好きな位置で色を指定できる。ただし、色付については上述の別ツールのほうが細かい制御ができる。本ツールとしてはCSV出力やフォーマット出力機能を優先している。

  • 文字コードの変換についてはネット上に色々な情報が散見された。幾つかのパッケージを試行錯誤したのち、encoding/japaneseを見つけた。ビルドの容易さからこのパッケージを選択した。

今後

今は以下のエイリアスを設定して使っている。

adb logcat -v threadtime |  logcatf "%t [invert] %p [reset] %10.10a %4i %4I %m" --color 

しかし、設定を切り替えようとすると途端にコマンドが長くなる。 今後は設定ファイルを使って複数設定を簡単に切り替えられるようにしたい。