質問

Androidロギングの構成が少し難しいです。これが私のコードのように見えるものです:

    if (Log.isLoggable("MY_TAG", Log.VERBOSE)) {
        Log.v("MY_TAG", "Here's a log message");
    }

かなりシンプルですよね?

しかし、私はかなりの困難を抱えています Log.isLoggable("MY_TAG", Log.VERBOSE) 真実を返すために。

あたり 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));

しかし、それもうまくいきません。

ここで私が間違っていることについてのアイデアはありますか? Nexus 1でAndroid 2.1-update1を実行しています。

役に立ちましたか?

解決

試す

adb shell setprop log.tag.MyAppTag VERBOSE

他のヒント

Androidの後のバージョンが望んでいるようです /data/local.prop ルートのみで書くことができる。 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 また、機能します。問題は、再起動後にプロパティ値が失われることです。

重要な目標は、大量のログコールが残り、そのサイズを増やし、パフォーマンスに影響を与えることさえある生産アプリを出荷しないことです。

これを行うために、私の推奨事項は、これらの定数を各クラスの上部に配置することです。

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

ここでログを記録します。これを行います。

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

変更してログをオンにします DEBUG 一定に真の。 (必要に応じて、アプリのすべてのコードを使用するためにこれらのstaticsを備えたクラスを1つ持つことができます...それは小さなアプリにとって理にかなっていますが、物事が大きくなるにつれて、どのパーツがログオンするかを決定するのは素晴らしいことです。)

これを行うことによって、あなたがあなたのアプリをで構築するとき DEBUG = false, 、すべてのロギングコードは実行されるだけでなく、アプリから完全に取り外されます。これは、必要なときにコードをかなり広範囲に記録するようにかなり広範囲に記録することを可能にするため、配送アプリのサイズにどのように影響するかを心配することなく、オンにすることができます。基本的に、必要な場所にログを投入するだけで、それらを残すことを心配しないでください。

これは、多くのAndroidフレームワークがとるアプローチです。たとえば、 アクティビティマネージャーサービス.

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top