AndroidのデフォルトのログレベルはINFO


同じ理由ではまったことがある人には既出だろうが。

デバッグ時だけログを出力しようと思い、

if ( Log.isLoggable(tag, Log.DEBUG)) {
    〜ログ出力
}

と書いたがいっこうに出力されない。(Log.dメソッドでは普通にLogcatに出力されているのに)

一通りログレベルを調べてみたがAndroid 2.2のエミュレータでは

という結果。デフォルトのログレベルはINFO。そりゃ出力され無いわけだ。

これは青天の霹靂と思ったのだが、調べてみるとソースコード(Javadoc)にちゃんと書いてあった。

    • Log.java#isLoggable
Checks to see whether or not a log for the specified tag is loggable at the specified level. The default level of any tag is set to INFO. This means that any level above and including INFO will be logged. Before you make any calls to a logging method you should check to see if your tag should be logged. You can change the default level by setting a system property: 'setprop log.tag. ' Where level is either VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT, or SUPPRESS. SUPPRESS will turn off all logging for your tag. You can also create a local.prop file that with the following in it: 'log.tag.=' and place that in /data/local.prop.

ログレベルを変更する場合、以下のようにadbコマンドを使用することで可能。

    • タグ"Hoge"のログレベルをDEBUGに設定する
# adb shell setprop log.tag.Hoge DEBUG

しかし/data/local.propを作成して上記同様にログレベルの設定が出来ると書いてあるのだが、こちらは何故か上手くいかない。

Log.d〜メソッドで出力したログはシステムのログレベルに関わらずLogcatに出力されているが、これは判断されるより前にシステムのログバッファに出力している訳で、実機のログとLogcatは同期がとれている訳ではないということだ。(そりゃーそうだよな)