Logの出力
アンドロイドには標準でログを出力するAPIがそなわっており、デバッグをおこなう際に便利である。
ログの出力
Logを出力するには、Logクラスのメソッドを使用する。
ログには4種類のログが存在し、出力するログの種類によって使うメソッドが決まっている。
以下に、アクティビティ起動時に4種類のログを出力するサンプルを示す。
ログ出力メソッドの第1引数にはログの発生源を示す文字列(タグという,ここではアクティビティのクラス名を使用) を、第2引数にはログに記録したいメッセージを指定する。
指定する引数には他のパターンも存在するが、それについては APIのリファレンスを参照。
APIリファレンスには、冗長ログは開発時にしか記録されない, デバッグログは実行環境では削除される、ような事が書いてある。
ログ出力の確認
eclipseでログ出力を確認するには、「LogCat」ビューを使う。
eclipseのメニューより「Windows(W)」→「ビューの表示(V)」→「その他(O)...」にて表示される 「ビューの表示」ダイアログボックスにて、「Android」の下の「LogCat」を選択する。
また、「LogCat」ビューはeclipseのメニューより「Windows(W)」→「パースペクティブを開く(O)」→「DDMS」を選択して表示される、 「DDMS」パースペクティブの下側にも表示される。
ところが、これにはシステムが出力するログしか表示されていない。
上記のプログラムより出力したログを表示するには、フィルターを作成する。
「LogCat」ビューの上部に表示される「+」マークのアイコンをクリックすると下図のダイアログボックスが表示されるので、
「Filter Name:」欄に適当な名前(ここではLogSample)を、「by Log Tag:」欄に ログ出力メソッドの第1引数に指定したタグ文字列「LogSample」を入力して、OKボタンを押すと 下図のように表示される。
もちろん、ここで「by pid:」欄にプログラムのプロセスID(pid)を指定してもかまわない。
「pid」の値は、DDMのパースペクティブに表示される「Devices」ウィンドウの、プログラムのパッケージ名の右側に表示されている。
この「LogCat」ビューの下側に表示される「フィルター:」欄に文字を入力すると、その文字が含まれているログのみが表示されるようになる。
「LogCat」ビューの右上部に表示される「V」,「D」,「I」,「W」,「E」のアイコンをクリックすると、表示するログの種類を制限できる。
以下に、それぞれのアイコンを選択した時の「LogCat」ビューを示す。
Logクラスのメソッドには、Throwableオブジェクトを引数にとるものもあり、 これを利用すると以下のようにエラーのスタックトレースをログに出力する事もできる。
上記、プログラムを実行すると「LogCat」ビューは、以下のように表示される。
日本語のログ表示の文字化け
- ≪追記≫
- 以下の内容は。古いSDKのバージョンについて書かれたものです。
現在のバージョンでは、文字化けは発生していないようです。
ところがeclipseの「LogCat」ビューでは、日本語のログ出力すると文字化けを起こしてしまう。
eclipseでプログラムを実行後に、コマンドプロンプトで、コードページを変更してlogcatを実行すると日本語表示できる。
以下にその手順を記す。
- コマンドプロンプトのフォント設定をMSゴシックに変更する。(最初に1回だけ設定すれば良い。)
- chcpコマンド「chcp 65001」にてコードページをutf-8に変更する。(コマンドプロンプトを起動するたびに毎回実行する必要がある。)
- logcatコマンド「adb logcat -s タグ名」を実行する。
注意点として、フォントの設定は必ずchcpコマンドを実行する前におこなう必要がある。
参考、コマンドプロンプトでのlogcatコマンドの実行についてはここを参照。ただ、これでも下図の2番目の例のようにログメッセージの表示が途中で切れてしまう。(私の環境だけかも知れないが)
Windowsサイズをチョッと変更すると、正しく表示し直される。
でも、こんなメンドクサイ事をするくらいなら、割り切って日本語を使わない方がましな気がする。
LogCatの標準出力,標準エラーの表示
多分、「Android 2.2 SDK」にアップデート してからだと思うが、気がついたら標準出力や標準エラーが表示されるようになっていた。
プログラムに以下の行を挿入してみると
LogCatに以下のように表示される。
タグはそれぞれ「System.out」と「System.err」なので、もちろんこのタグのフィルターを作成すれば、これだけをピックアップして表示させる事もできる。
一時的に何か確認したい場合には、便利。