さまざまな方法が優先順位を示します。あなたがそれらをリストしたように、それらは最も重要でないものから最も重要なものへと進んでいます。それらをコードのデバッグログに具体的にマップする方法は、作業しているコンポーネントまたはアプリ、およびAndroidがさまざまなビルドフレーバー(eng、userdebug、user)でそれらをどのように処理するかによって異なると思います。私はAndroidのネイティブデーモンでかなりの量の作業を行いましたが、これが私のやり方です。アプリに直接適用されない場合もありますが、共通点がある場合があります。私の説明が曖昧に聞こえるかもしれませんが、それはこれのいくつかが科学というより芸術であるからです。私の基本的なルールは、できるだけ効率的であり、システムのパフォーマンスを低下させることなくコンポーネントを適切にデバッグできることを確認し、常にエラーをチェックしてログに記録することです。
V-異なる間隔で、またはコンポーネントが処理するイベントが発生したときの状態の出力。また、私のコンポーネントが受信または送信するメッセージ/イベントのペイロードの非常に詳細な出力も可能です。
D-コンポーネント内で発生するマイナーイベントの詳細と、コンポーネントが送受信するメッセージ/イベントのペイロード。
I-コンポーネントが送受信するメッセージ/イベントのヘッダー、およびコンポーネントの操作に重要なペイロードの重要な部分。
W-異常または不審であるが、必ずしもエラーではないこと。
E-エラー、つまり、物事が正常に機能しているときに発生してはならないことを意味します。
人々が犯す最大の間違いは、V、D、Iなどを使いすぎているが、WやEは決して使用していないことです。エラーが定義上、発生するはずがない、または発生する頻度が非常に低い場合は、非常にそれが発生したときにメッセージを記録するための安価。一方、誰かがキーを押すたびにLog.i()を実行すると、共有ロギングリソースが悪用されます。もちろん、常識を働かせて、コントロールの外にあるもの(ネットワークエラーなど)や、タイトなループに含まれるもののエラーログに注意してください。
多分悪い
Log.i("I am here");
良い
Log.e("I shouldn't be here");
これらすべてを念頭に置いて、コードが「本番環境対応」に近づくほど、コードのベースログレベルを制限できます(アルファ版のV、ベータ版のD、プロダクション版のI、または場合によってはプロダクション版のWも必要になります)。 )。いくつかの簡単な使用例を実行し、ログを表示して、より制限的なフィルタリングを適用するときに何が起こっているのかを大部分理解できることを確認する必要があります。以下のフィルターを使用して実行した場合でも、アプリが何をしているかを知ることはできますが、すべての詳細を取得できるわけではありません。
logcat -v threadtime MyApp:I *:S
Verbose
ロギング用です。可能なすべての論理演算を出力したいときに使用します。