web-dev-qa-db-ja.com

Androidログレベル

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を実行しています。

25
seanoshea

試してみてください

adb Shell setprop log.tag.MyAppTag VERBOSE
30
Emmanuel

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は起動時にのみ読み取られます。
  • それ以降のバージョンのAndroidでは、/data/local.propファイルの権限を適切に設定する必要があります。そうしないと、ファイルが読み取られません。ファイルはrootのみが書き込み可能である必要があります。

adb Shell setprop log.tag.MyAppTag VERBOSEの使用も機能します。問題は、再起動後にプロパティ値が失われることです。

23
pedrohdz

重要な目標は、大量のログ呼び出しが残っている本番アプリを出荷せず、サイズを大きくし、場合によってはパフォーマンスに影響を与えることさえありません。

これを行うには、ログ呼び出しを行う各クラスの先頭にこれらの定数を配置することをお勧めします。

static final boolean DEBUG = false;
static final String TAG = "<MyClass>"

ここでログを記録し、次のようにします。

if (DEBUG) Log.v(TAG, "Something");

DEBUG定数をtrueに変更して、ログをオンにします。 (必要に応じて、アプリのすべてのコードで使用するこれらの静的なクラスを1つ持つことができます。これは小さなアプリでは理にかなっていますが、物事が大きくなるにつれて、ログオンをオンにする部分を決定するのは良いことです。)

これにより、DEBUG = falseを使用してアプリをビルドすると、すべてのログコードが実行されないだけでなく、アプリから完全に削除されます。これは、配送アプリのサイズにどのように影響するかを心配することなく、必要なときにオンにするためにコードにかなり大規模なロギングを残しておくことができるので便利です。基本的には、必要な場所にログをスローするだけで、そのままにしておく必要はありません。

これは、多くのAndroidフレームワークが採用するアプローチです。たとえば、 Activity ManagerService です。

これは上部にそれらの定数があり、それらに基づいてさまざまなログ行が全体に散らばっています。 (そして、このファイルは途方もなくばかげて大きいので、そのさまざまな側面のための他のサブデバッグ定数の束。)

9
hackbod