2011年9月23日金曜日

WebSocket WiFiデバッグ改良ポイント(2)

WebSocket WiFiデバッグ改良ポイント(1)のつづきです。
今回は「ログの各行にタイムスタンプをつける。」という点を改良してみたいと思います。Androidプロジェクト内のJavaソースに焦点を当てれば改良可能だとわかりました。改良後のLogcatブラウザ画面です。左側にタイムスタンプ(日付と時分秒)が付きました。
改良点として以下の2点を挙げていました。
  1. ブラウザ上に色分け表示をさせる。(まだできてない…)
  2. ログの各行にタイムスタンプをつける。(今回うまくできた!)
前回は1番目のブラウザ上の色分けで、JavaScriptわからんなあといってたのですが、2番目の「ログの各行にタイムスタンプをつける。」という点は、Androidプロジェクト内のJavaソースのadb logcatコマンドに焦点を当てれば改良可能だとわかりました。

もともと、EclipseのLogcatビューではタイムスタンプが出力されているのに、コマンドラインからのadb logcatではタイムスタンプがありません。
EclipseのLogcatビュー:タイムスタンプあり
$ adb logcat : タイムスタンプ無し

Eclipseがタイムスタンプを付与してくれているのかな?そんな大層な事をやっているのかな?と思って、Logcatについて検索していると、以下のサイトで紹介がありました。

logcatを出力するadb logcatコマンドは、-vオプションによっていくつかのフォーマットを出力する事が可能です。
Android DevelopersサイトのDev Guide>tools>Android Debug Bridgeより
  • brief — Display priority/tag and PID of originating process (the default format).
  • process — Display PID only.
  • tag — Display the priority/tag only.
  • thread — Display process:thread and priority/tag only.
  • raw — Display the raw log message, with no other metadata fields.
  • time — Display the date, invocation time, priority/tag, and PID of the originating process.
  • long — Display all metadata fields and separate messages with a blank lines.
これを”黒うさぎノート: adb logcatについてのまとめ"では一覧表にされていました(素晴らしい!!God job!です!)。
-v Parameter Format Time Priority Tag PID Thread Message
brief (default) Priority/Tag(PID): Message O O O O
process Priority(PID) Message (Tag) O O O
tag Priority/Tag: Message O O O
thread Priority(PID:Thread) Message O O O O
raw Message O
time Time Priority/Tag(PID): Message O O O O O
long [Time PID:Thread Priority/Tag] Message O O O O O O
要するにタイムスタンプは、デフォルトのbriefでは表示されず、-vオプションのtimeまたはlongパラメータでないと表示されないという訳です。

結局、以下のコマンドをAndroidプロジェクト側で投入すればタイムスタンプ付きのLogcatを取得できるということになります。
$ adb logcat -v time
または
$ adb logcat -v long
このオプション付きadb logcatコマンドをAndroidアプリ内で発行する事ができれば、ブラウザ側にタイムスタンプ付きのLogcatログが表示されるでしょう。
という訳でJavaソースをみていくと、すでにオプションがコメントアウトされた状態で入れてありました!作者のtomorrowkeyさんは想定ずみだったんですね。
/**
     * logcatコマンドを作る
     * 
     * @return
     */
    private static String[] createLogcatCommand() {
        ArrayList commandLine = new ArrayList();
        // コマンドの作成
        commandLine.add("logcat");
        // commandLine.add("-v");
        // commandLine.add("time");
        // commandLine.add("-s");
        // commandLine.add("tag:W");
        return commandLine.toArray(new String[commandLine.size()]);
    }
96行目と97行目のコメントを外したら-vオプションのtimeパラメータを指定したlogcatコマンドが発行されます。
ビルドして試してみました!うまく行きました!タイムスタンプが表示されています!!
左側に日付と時間が付きました!

また、98行目と99行目のコメントを外したら以下のコマンドがAndroidから発行される事になります。
$ adb logcat -s tag:W
-sオプションは、タグ名:優先度でログをフィルタリングするオプションです。
優先度はError,Warning,Info,Verboseなどがあります。優先度ごとに色分け表示をしたい!というのがこのブログの最終目標です。
タグ名は自分で自由に付ける名前です。以下のTagインスタンス定数がそれにあたります。
  private static final String Tag = "TagString";
  private static final String Message = "MessageString";

  public void hoge(){
    //Error
    Log.e(Tag, Message);
    //Warning
    Log.w(Tag, Message);
    //Info
    Log.i(Tag, Message);
    //Debug
    Log.d(Tag, Message);
    //Verbose
    Log.v(Tag, Message);
  }
優先度ごとにLogクラスのスタティックメソッドで任意のLogcatを出力することが可能なのは、このブログを読む人はまずご存知だと思います。-sオプションでタグ名と優先度を指定できますので、必要なLogcatだけ出力可能ということになります(しかもワイルドカードの*が使えます)。

任意のアプリのLogcatのみブラウザに表示させたい!という用途に使えます。
私のような、ADKやMicroBridgeのアプリを使っている者にとっては有用で楽しみなオプションです。
これについてはまた改めて書きたいと思います。

0 件のコメント:

コメントを投稿