Androidロギングの構成に少し問題があります。コードは次のようになります。
_ if (Log.isLoggable("MY_TAG", Log.VERBOSE)) {
Log.v("MY_TAG", "Here's a log message");
}
_
とても簡単ですよね?
ただし、Log.isLoggable("MY_TAG", Log.VERBOSE)
をtrueに戻すのはかなり困難です。
http://developer.Android.com/reference/Android/util/Log.html ごとに、次のような/ data /ディレクトリにlocal.propファイルを追加してみました。
_log.tag.MY_TAG=VERBOSE
_
しかし、運がありません。私も試しました:
_System.setProperty("log.tag.MY_TAG", String.valueOf(Log.VERBOSE));
_
しかし、それも機能しません。
私がここで間違っていることについて何か考えはありますか?違いがあれば、Nexus1でAndroid 2.1-update1を実行しています。
試してみてください
adb Shell setprop log.tag.MyAppTag VERBOSE
Android以降のバージョンでは、/data/local.prop
をrootのみが書き込み可能にする必要があるようです。adb Push
コマンドは、最初はすべてのユーザーに読み取り/書き込みアクセスを許可してファイルを作成するようです(デフォルトのファイルマスクは777
です。Androidは、セキュリティ上のリスクとなる可能性があるため、賢明なことに/data/local.prop
を無視します。
私はAndroid 2.3.3、および4.1.2を試しただけです。前者は、誰でも書き込み可能なlocal.prop
の読み取りに問題はありませんが、後者は黙って無視しているように見えます。ファイルの内容。
元の質問で説明されているようにlocal.prop
ファイルを作成します。
log.tag.MY_TAG=VERBOSE
そして、次のようにデバイスにプッシュすると、うまくいくようです。
adb Push local.prop /data/local.prop
adb Shell chmod 644 /data/local.prop
adb Shell chown root.root /data/local.prop
adb reboot
以下を実行することにより、local.prop
の値が読み取られたことを再確認できます。
adb Shell getprop | grep log.tag
要約すると:
/data/local.prop
は起動時にのみ読み取られます。/data/local.prop
ファイルの権限を適切に設定する必要があります。そうしないと、ファイルが読み取られません。ファイルはrootのみが書き込み可能である必要があります。adb Shell setprop log.tag.MyAppTag VERBOSE
の使用も機能します。問題は、再起動後にプロパティ値が失われることです。
重要な目標は、大量のログ呼び出しが残っている本番アプリを出荷せず、サイズを大きくし、場合によってはパフォーマンスに影響を与えることさえありません。
これを行うには、ログ呼び出しを行う各クラスの先頭にこれらの定数を配置することをお勧めします。
static final boolean DEBUG = false;
static final String TAG = "<MyClass>"
ここでログを記録し、次のようにします。
if (DEBUG) Log.v(TAG, "Something");
DEBUG
定数をtrueに変更して、ログをオンにします。 (必要に応じて、アプリのすべてのコードで使用するこれらの静的なクラスを1つ持つことができます。これは小さなアプリでは理にかなっていますが、物事が大きくなるにつれて、ログオンをオンにする部分を決定するのは良いことです。)
これにより、DEBUG = false
を使用してアプリをビルドすると、すべてのログコードが実行されないだけでなく、アプリから完全に削除されます。これは、配送アプリのサイズにどのように影響するかを心配することなく、必要なときにオンにするためにコードにかなり大規模なロギングを残しておくことができるので便利です。基本的には、必要な場所にログをスローするだけで、そのままにしておく必要はありません。
これは、多くのAndroidフレームワークが採用するアプローチです。たとえば、 Activity ManagerService です。
これは上部にそれらの定数があり、それらに基づいてさまざまなログ行が全体に散らばっています。 (そして、このファイルは途方もなくばかげて大きいので、そのさまざまな側面のための他のサブデバッグ定数の束。)