アプリケーションごとにAndroid logcat出力をフィルタリングするにはどうすればよいですか?これが必要なのは、デバイスを接続したときに、他のプロセスからのスパムのために必要な出力が見つからないためです。
編集:オリジナルは下にあります。 1つのAndroid Studioが存在しなかったとき。ただし、アプリケーション全体をフィルタリングする場合は、端末の表示にpidcatを使用するか、Android Studioを使用します。 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
これは、同じタグを使用しないすべてを除外します。
http://developer.Android.com/tools/debugging/debugging-log.html によると:
優先度「Info」以上のタグ「ActivityManager」を除くすべてのログメッセージ、および優先度「Debug」以上のタグ「MyApp」を含むすべてのログメッセージを抑制するフィルター式の例を次に示します。
adb logcat ActivityManager:I MyApp:D *:S
上記の式の最後の要素*:Sは、すべてのタグの優先度レベルを「サイレント」に設定し、「表示」および「MyApp」のログメッセージのみが表示されるようにします。
こんにちは私はこれを使用して解決策を得ました:
このコマンドは端末から実行する必要があります。結果が出ました
adb logcat | grep `adb Shell ps | grep com.package | cut -c10-15`
私はAndroid Studioに取り組んでいます。パッケージ名を使用してメッセージを取得する素敵なオプションがあります。 「フィルター構成の編集」で、「パッケージ名別」にパッケージ名を追加して、新しいフィルターを作成できます。
ログが余分なターミナルウィンドウから来ているという事実に耐えられる場合は、 pidcat (パッケージ名のみを取得し、PIDの変更を追跡します。)
MyAppという名前のアプリケーションに次のコンポーネントが含まれているとします。
Logcatを使用して、アプリケーションMyAppからのロギング出力をフィルタリングするには、次のように入力します。
adb logcat MyActivity1:v MyActivity2:v MyActivity3:v MyService:v *:s
ただし、アプリケーション名MyAppを使用してフィルタリングするのではなく、アプリケーションのすべてのコンポーネントのTAG名を知っている必要があります。詳細については logcat を参照してください。
アプリケーションレベルでのフィルタリングを可能にする1つのソリューションは、一意のTAGのそれぞれにプレフィックスを追加することです。
これで、TAGプレフィックスを使用してlogcat出力のワイルドカードフィルターを実行できます。
adb logcat | grep MyApp
結果は、アプリケーション全体からの出力になります。
これを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
アプリケーションからエラーが発生すると、Logcatはセッションフィルターを自動的に表示します。セッションフィルターを自分で作成できます。新しいlogcatフィルターを追加して、フィルター名のフォームに入力してください。次に、アプリケーション名をアプリケーションパッケージに入力します。 (たとえば、私のアプリケーションは「Adukan」で、パッケージは「com.adukan」なので、アプリケーション名でアプリケーションパッケージ「com.adukan」を入力します)
Eclipseを使用している場合、shadmazumderで提示されているAndroid Studioで可能なのと同じように、アプリケーションでフィルタリングできます。
logcatに移動し、保存されたフィルタービューを表示をクリックしてから、新しいlogcatフィルターを追加をクリックします。次のように表示されます。
次に、フィルターに名前を追加し、by application nameでアプリケーションのパッケージを指定します。
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エミュレーターよりもプログラム関連の出力がはるかに少ないです。
これがおそらく最も簡単なソリューションです。
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`"
私はそれをファイルに保存するために使用します:
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();
}
はい、自動的に取得します。..
AVD 14 に更新します。logcatは自動的にsession filter
になります
特定のアプリ(パッケージ)でログインをフィルタリングします
Logcatビューの左側には、「保存されたフィルター」ウィンドウがあります。ここで、アプリケーション名(com.your.packageなど)ごとに新しいlogcatフィルターを追加できます。
一般に、プロンプトでこのコマンド「adb Shell ps」を実行し(実行中のプロセスを表示できます)、アプリケーションのpidを検出することができます。このpidを手にして、Eclipseにアクセスしてpid:XXXX(XXXXはアプリケーションpid)を書き込むと、このアプリケーションによってログ出力がフィルター処理されます。
または、Eclipseのlogcatビューで簡単な方法で、目的のアプリケーションに関連するWordを検索し、pidを検出してから、pid "pid:XXXX"でフィルターを実行します。
私の.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
検索フィールドに以下を入力することにより、Eclipse logcatでこれを実現できます。
app:com.example.myapp
com.example.myappはアプリケーションパッケージ名です。
私が通常していることは、PIDによる別のフィルターを使用することです。これは現在のセッションと同等です。しかし、もちろん、アプリケーションを実行するたびに変わります。よくありませんが、ログタグに関係なく、アプリに関するすべての情報を取得する唯一の方法です。
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に使用します。
ログの名前/プロセスを表示できるアプリをストアで見つけました。 Android Studioは、他のプロセスによって生成されるログに(?)を置くだけなので、どのプロセスがこのログを生成しているかを知っておくと便利です。それでも、このアプリにはプロセス名によるフィルターがありません。あなたはそれを見つけることができます こちら 。
アプリケーション名として最初のパラメーターを使用します。 Log.d( "your_Application_Name"、 "message");
logCatで:Filterを作成---> Filter Name&Log Tag:が「your_Application_Name」に等しい場合、アプリケーションの新しいタブが作成されます。
Sdk/tools/monitorの下にあるAndroid Device Monitorアプリケーションには、アプリケーションパッケージ名を入力する「アプリケーション名で」フィルタリングするlogcatオプションがあります。
ログタグには完全修飾クラス名を使用します。
public class MyActivity extends Activity {
private static final String TAG = MyActivity.class.getName();
}
それから
Log.i(TAG, "hi");
次に、grepを使用します
adb logcat | grep com.myapp