[Android]Logレベルの設定 | 妄想プログラマのらくがき帳

2012年12月9日日曜日

[Android]Logレベルの設定

Androidでは、LogレベルをTAGごとに設定できます。
特定のTAGに設定されているLogレベルは、Log.isLoggable(String tag, int level)で確認できます。
例えばTAGが"MyActivity"の場合、

Log.isLoggable("MyActivity",  Log.VERBOSE)  ⇒  False
Log.isLoggable("MyActivity",  Log.DEBUG)  ⇒  False
Log.isLoggable("MyActivity",  Log.INFO)  ⇒  True
Log.isLoggable("MyActivity",  Log.WARN)  ⇒  True
Log.isLoggable("MyActivity",  Log.ERROR)  ⇒  True

となれば、TAG"MyActiviti"のLogレベルはINFOです。

AndroidのデフォルトLogレベルはINFOなので、
特に何も設定しない場合、isLoggable()は上記のような結果になります。
このLogレベルですが、変更する方法として次の2つの方法があります。

1.adbで変更する

adbで以下のコマンドを実行することで、Logレベルを変更できます。
adb shell setprop log.tag.MyActivity DEBUG
この場合、TAG"MyActivity"のLogレベルがDEBUGに設定されます。

2.local.propで変更する

/data/local.propに次の1行を追加します。(local.propが無ければ作成する)

log.tag.MyActivity=VERBOSE

この場合、TAG"MyActivity"のLogレベルがVERBOSEに設定されます。

以上の2つの方法でLogレベルを変更できるのですが、
設定できるLogレベルは、VERBOSE、DEBUG、INFOのいずれかのようです。
WARNやERRORに設定しようとしてもINFOに設定されてしまいます。

Logレベルの設定方法がわかり、これでLogの出力制御ができる!
っと思いきや、実はこれだけでは出力制御はできません。
なぜならば、Log.v()やLog.d()などのメソッドはレベルに関係なくログを出力してしまうからです。
何のためのLogレベルだよ!って感じですが、そういう仕様みたいです。
なので、出力制御するには以下のような処理をかます必要があります。
if (Log.isLoggable("MyActivity", Log.DEBUG)) {
 Log.d("MyActivity", "ログ・メッセージ");
}
実際に使う場合は、上記のような処理をまとめたLogクラスを作成して使うことになると思います。

しかし、何故こんな仕様なんだろう。。。


0 件のコメント:

コメントを投稿