Android/LogLevel

LogLevelとLogCat

EclipseのADTプラグインにはLogCatというウインドウが付属しており(というより、Eclipse上でなくとも使用できる模様)、 AndroidのAPIやアプリケーションの出力したログを表示することができるのだが、これが非常にわかりづらい。

LogCatの操作

LogCat画面の右上の方に、V, D, I, W, E等のアイコンと+, 紙, -等のアイコン、紙に☓印のアイコンがあるが、これらの機能は 以下のようである。

これらは、アプリケーションがどのようなログを出力するかには一切影響を与えない。LogCatの行うことは、単純に「出力されたものをフィルタリングして表示する」だけになる。

Vアイコンをクリックすれば、アプリ側がVERBOSEレベル以上のログを出力することになるわけでは全く無い。LogCat画面の制御とアプリ側がどのレベルのログを出力するかは全く無関係である。

アプリ側のログ出力

アプリ側では、例えば以下のようにしてVERBOSEあるいはDEBUGレベルのログを出力することができる。

Log.v(tag, "this is VERBOSE log");
Log.d(tag, "this is DEBUG log");

しかし、このような書き方をしてはいけない。これでは常にこれらのレベルが出力されてしまうことになる。 以下のように記述して、不要なログ出力を抑える必要がある。

if (Log.isLoggable(tag, Log.DEBUG) {
  Log.d(tag, "this is DEBUG log");
}

ログレベルの制御

アプリ側にどのレベルのログを出力させるかは、エミュレータ(実機も?)に指示しておく必要がある。 この指示の無い場合に、出力されるログはinfoレベル以上つまりI, W, Eである。

例えば、特定のタグについてDEBUG以上のログを出力させる場合は、adbにて

adb shell setprop log.tag.TAG DEBUG

と指示する必要がある(面倒だが、Eclipse ADT上でこれを制御する方法は見つからない)。

ただし、このログレベルの制御はあくまでも、前述のようにLog.isLoggableを使用している場合である。 これを使用せずに、

Log.d(tag, "this is DEBUG log");

と記述した場合には、この指定に関わらず出力されてしまう。

last edited 2010-10-13 03:06:36 by ysugimura