web-dev-qa-db-ja.com

アプリケーションごとにAndroid logcatをフィルタリングするには?

アプリケーションごとにAndroid logcat出力をフィルタリングするにはどうすればよいですか?これが必要なのは、デバイスを接続したときに、他のプロセスからのスパムのために必要な出力が見つからないためです。

118
Alexey Zakharov

編集:オリジナルは下にあります。 1つのAndroid St​​udioが存在しなかったとき。ただし、アプリケーション全体をフィルタリングする場合は、端末の表示にpidcatを使用するか、Android St​​udioを使用します。 logcatの代わりにpidcatを使用すると、タグはアプリケーションである必要はありません。 pidcat com.your.applicationで呼び出すことができます

独自のタグを使用する必要があります: http://developer.Android.com/reference/Android/util/Log.html

のような。

Log.d("AlexeysActivity","what you want to log");

そして、ログを読みたいときは>

adb logcat -s AlexeysActivity 

これは、同じタグを使用しないすべてを除外します。

46
David Olsson

http://developer.Android.com/tools/debugging/debugging-log.html によると:

優先度「Info」以上のタグ「ActivityManager」を除くすべてのログメッセージ、および優先度「Debug」以上のタグ「MyApp」を含むすべてのログメッセージを抑制するフィルター式の例を次に示します。

adb logcat ActivityManager:I MyApp:D *:S

上記の式の最後の要素*:Sは、すべてのタグの優先度レベルを「サイレント」に設定し、「表示」および「MyApp」のログメッセージのみが表示されるようにします。

  • V —詳細(最低優先度)
  • D —デバッグ
  • I —情報
  • W —警告
  • E —エラー
  • F —致命的
  • S —サイレント(最高の優先順位、何も印刷されない)
35

こんにちは私はこれを使用して解決策を得ました:

このコマンドは端末から実行する必要があります。結果が出ました

adb logcat | grep `adb Shell ps | grep com.package | cut -c10-15`
25
Shanmugapriyan

私はAndroid St​​udioに取り組んでいます。パッケージ名を使用してメッセージを取得する素敵なオプションがあります。 「フィルター構成の編集」で、「パッケージ名別」にパッケージ名を追加して、新しいフィルターを作成できます。

enter image description here

19
Shad

ログが余分なターミナルウィンドウから来ているという事実に耐えられる場合は、 pidcat (パッケージ名のみを取得し、PIDの変更を追跡します。)

12
TheHippo

MyAppという名前のアプリケーションに次のコンポーネントが含まれているとします。

  • MyActivity1
  • MyActivity2
  • MyActivity3
  • MyService

Logcatを使用して、アプリケーションMyAppからのロギング出力をフィルタリングするには、次のように入力します。

adb logcat MyActivity1:v MyActivity2:v MyActivity3:v MyService:v *:s

ただし、アプリケーション名MyAppを使用してフィルタリングするのではなく、アプリケーションのすべてのコンポーネントのTAG名を知っている必要があります。詳細については logcat を参照してください。

アプリケーションレベルでのフィルタリングを可能にする1つのソリューションは、一意のTAGのそれぞれにプレフィックスを追加することです。

  • MyAppActivity1
  • MyAppActivity2
  • MyAppActivity3
  • MyAppService

これで、TAGプレフィックスを使用してlogcat出力のワイルドカードフィルターを実行できます。

adb logcat | grep MyApp

結果は、アプリケーション全体からの出力になります。

11

これをapplog.shに入れます

#!/bin/sh
PACKAGE=$1
APPPID=`adb -d Shell ps | grep "${PACKAGE}" | cut -c10-15 | sed -e 's/ //g'`
adb -d logcat -v long \
 | tr -d '\r' | sed -e '/^\[.*\]/ {N; s/\n/ /}' | grep -v '^$' \
 | grep " ${APPPID}:"

その後:applog.sh com.example.my.package

10
Gavriel

アプリケーションからエラーが発生すると、Logcatはセッションフィルターを自動的に表示します。セッションフィルターを自分で作成できます。新しいlogcatフィルターを追加して、フィルター名のフォームに入力してください。次に、アプリケーション名をアプリケーションパッケージに入力します。 (たとえば、私のアプリケーションは「Adukan」で、パッケージは「com.adukan」なので、アプリケーション名でアプリケーションパッケージ「com.adukan」を入力します)

7
sigeje

Eclipseを使用している場合、shadmazumderで提示されているAndroid St​​udioで可能なのと同じように、アプリケーションでフィルタリングできます。

logcatに移動し、保存されたフィルタービューを表示をクリックしてから、新しいlogcatフィルターを追加をクリックします。次のように表示されます。

enter image description here

次に、フィルターに名前を追加し、by application nameでアプリケーションのパッケージを指定します。

6
Ciro Costa

Windows 7ラップトップでは、 'adb logcat | 「com.example.name」を見つけて、残りからのシステムプログラム関連のlogcat出力をフィルタリングします。 logcatプログラムからの出力は、findコマンドにパイプされます。 'com.example.name'を含むすべての行がウィンドウに出力されます。二重引用符は、findコマンドの一部です。

Logコマンドの出力を含めるには、パッケージ名(ここでは "com.example.name")を、Logコマンドの最初のパラメーターの一部として次のように使用します。

Log.d("com.example.name activity1", "message");

注:私のSamsung Galaxy電話は、レベル17エミュレーターよりもプログラム関連の出力がはるかに少ないです。

5
earlcasper

これがおそらく最も簡単なソリューションです。

Tom Mulcahyのソリューションに加えて、以下のようにさらに簡素化できます。

alias logcat="adb logcat | grep `adb Shell ps | egrep '\bcom.your.package.name\b' | cut -c10-15`"

通常のエイリアスと同様に使用方法は簡単です。シェルにコマンドを入力するだけです:

logcat

エイリアスのセットアップは便利です。また、メインプロセスのみに関心がある場合、正規表現によりマルチプロセスアプリに対して堅牢になります。

Cozでは、必要に応じて各プロセスにさらにエイリアスを設定できます。または、hegazyのソリューションを使用してください。 :)

さらに、ログレベルを設定する場合は、

alias logcat-w="adb logcat *:W | grep `adb Shell ps | egrep '\bcom.your.package.name\b' | cut -c10-15`"
2
Frank Du

私はそれをファイルに保存するために使用します:

        int pid = Android.os.Process.myPid();
        File outputFile = new File(Environment.getExternalStorageDirectory() + "/logs/logcat.txt");
        try {
            String command = "logcat | grep " + pid + " > " + outputFile.getAbsolutePath();
            Process p =  Runtime.getRuntime().exec("su");
            OutputStream os = p.getOutputStream();
            os.write((command + "\n").getBytes("ASCII"));
        } catch (IOException e) {
            e.printStackTrace();
        }
1
SpyZip

はい、自動的に取得します。..
AVD 14 に更新します。logcatは自動的にsession filterになります
特定のアプリ(パッケージ)でログインをフィルタリングします

1

Logcatビューの左側には、「保存されたフィルター」ウィンドウがあります。ここで、アプリケーション名(com.your.packageなど)ごとに新しいlogcatフィルターを追加できます。

1
jane1012

一般に、プロンプトでこのコマンド「adb Shell ps」を実行し(実行中のプロセスを表示できます)、アプリケーションのpidを検出することができます。このpidを手にして、Eclipseにアクセスしてpid:XXXX(XXXXはアプリケーションpid)を書き込むと、このアプリケーションによってログ出力がフィルター処理されます。

または、Eclipseのlogcatビューで簡単な方法で、目的のアプリケーションに関連するWordを検索し、pidを検出してから、pid "pid:XXXX"でフィルターを実行します。

1
DaniC

私の.bash_profile関数、それはあらゆる用途のものかもしれません

logcat() {
    if [ -z "$1" ]
    then
        echo "Process Id argument missing."; return
    fi
    pidFilter="\b$1\b"
    pid=$(adb Shell ps | egrep $pidFilter | cut -c10-15)
    if [ -z "$pid" ]
    then
        echo "Process $1 is not running."; return
    fi
    adb logcat | grep $pid
}

alias logcat-myapp="logcat com.sample.myapp"

使用法:

$ logcat-myapp

$ logcat com.Android.something.app

1
user1817787

Android St​​udioのAndroid Monitorウィンドウで:1.フィルタリングするアプリケーションを選択します2. [選択したアプリケーションのみを表示]を選択します

enter image description here

1
DJTano

検索フィールドに以下を入力することにより、Eclipse logcatでこれを実現できます。

app:com.example.myapp

com.example.myappはアプリケーションパッケージ名です。

1
Lilylakshi

私が通常していることは、PIDによる別のフィルターを使用することです。これは現在のセッションと同等です。しかし、もちろん、アプリケーションを実行するたびに変わります。よくありませんが、ログタグに関係なく、アプリに関するすべての情報を取得する唯一の方法です。

1
Androiderson

Linux/Un * X/Cygwinでは、次のコマンド(読みやすさのために分割)を使用して、プロジェクト内のすべてのタグのリスト(それぞれの後に:Vを追加)を取得できます。

$ git grep 'String\s\+TAG\s*=\s*' |  \
  Perl -ne 's/.*String\s+TAG\s*=\s*"?([^".]+).*;.*/$1:V/g && print ' | \
  sort | xargs
AccelerometerListener:V ADNList:V Ashared:V AudioDialog:V BitmapUtils:V # ...

タグを定義する両方の方法で定義されたタグについて説明します。

private static final String TAG = "AudioDialog";
private static final String TAG = SipProfileDb.class.getSimpleName();

そして、それをadb logcatに使用します。

0
pevik

ログの名前/プロセスを表示できるアプリをストアで見つけました。 Android St​​udioは、他のプロセスによって生成されるログに(?)を置くだけなので、どのプロセスがこのログを生成しているかを知っておくと便利です。それでも、このアプリにはプロセス名によるフィルターがありません。あなたはそれを見つけることができます こちら

0
Sanjeet A

アプリケーション名として最初のパラメーターを使用します。 Log.d( "your_Application_Name"、 "message");

logCatで:Filterを作成---> Filter Name&Log Tag:が「your_Application_Name」に等しい場合、アプリケーションの新しいタブが作成されます。

0
Hiren Dabhi

Sdk/tools/monitorの下にあるAndroid Device Monitorアプリケーションには、アプリケーションパッケージ名を入力する「アプリケーション名で」フィルタリングするlogcatオプションがあります。

0
alexy

ログタグには完全修飾クラス名を使用します。

public class MyActivity extends Activity {
  private static final String TAG = MyActivity.class.getName();
}

それから

Log.i(TAG, "hi");

次に、grepを使用します

adb logcat | grep com.myapp
0
Nick Snyder