LogcatをEclipseでADT for Androidとともに使用すると、他の多くのアプリケーションからもメッセージが表示されることを確認しました。これをフィルタリングして、自分のアプリケーションからのメッセージだけを表示する方法はありますか。
パッケージ名は一意であることが保証されているので、タグをパッケージ名としてLog
関数を使用してから、パッケージ名でフィルタリングできます。
注:Build Tools 21.0.3では、TAGSは23文字以下に制限されているため、これは機能しなくなります。
Log.<log level>("<your package name>", "message");
adb -d logcat <your package name>:<log level> *:S
-d
は実際のデバイスを表し、-e
はエミュレータを表します。複数のエミュレータが実行されている場合は-s emulator-<emulator number>
を使用できます(例:-s emulator-5558
)
例:adb -d logcat com.example.example:I *:S
メッセージをログに送信するためにSystem.out.print
を使用している場合は、System.outへの呼び出しのみを表示するためにadb -d logcat System.out:I *:S
を使用できます。
あなたはここですべてのログレベルとより多くの情報を見つけることができます: https://developer.Android.com/studio/command-line/logcat.html
http://developer.Android.com/reference/Android/util/Log.html
編集:私は銃を少しジャンプして、Eclipseでlogcatについて質問していることに気付いたようです。上記で投稿したのは、コマンドラインからadbを通してlogcatを使用するためのものです。同じフィルターがEclipseに転送されるかどうかはわかりません。
Ps/grep/cutを使用してPIDを取得し、次にそのPIDを持つlogcatエントリをgrepします。これが私が使うコマンドです:
adb logcat | grep -F "`adb Shell ps | grep com.asanayoga.asanarebel | tr -s [:space:] ' ' | cut -d' ' -f2`"
(同じ数を含む無関係なログ行の理論的問題を回避するために正規表現をさらに改善することができますが、それは私にとって問題にはなりませんでした)
これは複数のプロセスを一致させるときにも機能します。
Windowsでは、次のことができます。
adb logcat | findstr com.example.package
フィルターを追加
名前を指定してください
あなたのフィルタを選択してください。
Android 7.0以降、logcatには--pidフィルタオプションがあり、pidofコマンドが使用可能になります。com.example.appをあなたのパッケージ名に置き換えてください。
(ubuntu端末/ Android 7.0以降)
adb logcat --pid=`adb Shell pidof -s com.example.app`
または
adb logcat --pid=$(adb Shell pidof -s com.example.app)
Pidofコマンドの詳細については、
https://stackoverflow.com/a/15622698/7651532
私にとってはこれはmacで動作しますTerminal
adb
があるフォルダに移動し、ターミナルに以下のコマンドを入力してください
./adb logcat MyTAG:V AndroidRuntime:E *:S
ここではMyTAG
とAndroidRuntime
のすべてのログをフィルタリングします。
それは数年経ちました、そして、事は変わりました。そしてEclipseは正式にサポートされなくなりました。それで、ここにもう2つの最新のアプローチがあります:
Android monitor
ツールボックスで、debuggable process
ごとにlogcatをフィルタリングできます。通常、アプリケーションを開発するとき、それはデバッグ可能なプロセスです。時々私はこれに関して問題を抱えています、そして、以下をしてください:
Tools
- > Android
- > Enable ADB Integration
。
既に有効になっている場合は、オフにしてからもう一度オンにします。
あなたのモバイル機器のプラグを抜き、差し直してください。
正規表現とデバッグレベルでフィルタリングするオプションもあります。
端末ベースのソリューションを使用したい場合は、これはadb logcat
の上のNice pythonラッパーです。それについての良いところは、あなたが複数の設定を保存して単にそれらを再利用できるということです。 tags
によるフィルタリングはかなり信頼できます。 package
でフィルターして1つ以上のアプリのログのみを表示することもできますが、アプリを起動する直前にlogcat-color
を起動します。
前回の回答にはコメントできないようですので、新しい回答を投稿します。これは、Tom Mulcahyの回答に対するコメントです。これは、adb Shell ps
PID列が可変であるため、ほとんどのデバイスで機能するようにコマンドを変更する方法を示しています。
注:以下のコマンドは、多数のデバイスを接続している場合に機能します。だからdevice id
が必要です。そうでなければ、大括弧 '['、 ']'を単純に省略することができます。
1。 pidの列を調べるには、次のように入力します。
adb [-s DEVICE_ID] Shell ps | head -n 1
PIDの列番号を記憶してください。番号付けは1
から始まります。
2。その後、次のように入力します。
adb [-s DEVICE_ID] logcat | grep $(adb [-s DEVICE_ID] Shell ps \
| grep "com.example" | awk -F" " ' {print $PUT_COLUMN_HERE}')
記憶した列をPUT_COLUMN_HERE
に入れるだけです。 $5
アプリケーションを再実行するたびに、アプリケーションがOSから新しいPIDを取得するため、2番目のコマンドを再実行する必要があります。
これは私にとってgit bashでうまくいっています:
$ pid=$(adb Shell ps | grep <package name> | cut -c11-15) ; adb logcat | grep $pid
これを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をパッケージ名でフィルタリングするためのシェルスクリプトを書きました。
ps | grep com.example.package | cut -c10-15
実際のpidを見つけるために/ proc/$ pid/cmdlineを使い、その後logcatにgrepを実行します。
これは私にとってUSBデバッグで機能します。
デバイスを接続して使用します。
adb Shell
Logcatを使うだけです:
logcat | grep com.youapp.packagename
Eclipse用のADT v15では、アプリケーション名を指定できます(実際にはandroidmanifest.xmlのpackage値です)。
私はアプリでフィルタリングできることが大好きですが、新しいlogcatには自動スクロールに関するバグがあります。以前のログを見るために少し上にスクロールすると、2、3秒で自動的に下にスクロールします。ログを1/2上にスクロールしても、ログが下に戻るのを防ぐことはできますが、多くの場合は役に立ちません。
編集:私はコマンドラインからアプリのフィルタを指定しようとした - しかし運が悪い。誰かがこれを見つけたらORどのように自動スクロールを止めるか、私に知らせてください。
Windowsのコマンドプロンプトでadb logcat -d | findstr <package>
を使用します。
*これは jj _ によって最初に言及されました、しかしそれはコメントでそれを見つけるのに年齢を要しました...
あなたがAndroid Studioを使っているなら、あなたはあなたがログキャットを受け取りたいプロセスを選ぶことができます。これがスクリーンショットです。
Ubuntu:adb logcat -b all -v color --pid = `adbシェルpidof -s com.packagename`アプリの色と連続ログ
アプリに関するシステムメッセージだけを表示する方法があるかどうかはわかりませんが、文字列に基づいてフィルタをかけることができます。プログラム内でログを作成している場合は、特定の一意のキーワードを含めるだけで、そのWordに基づいてフィルタリングできます。
ログに名前を付けます。私は私のことを「和」と呼びました。
Android Studioで、Android-> Edit Filter Configurationsに移動します。
次に、ログに付けた名前を入力します。私の場合、それは "wawa"と呼ばれています。ここにあなたができるフィルターの種類のいくつかの例があります。 System.out、System.err、Logs、またはパッケージ名でフィルタリングできます。
Eclipse を使用している場合は、下の logCat ウィンドウで緑色の+記号を押してください。パッケージ名(com.example.yourappname)を by Application Name ボックスに入れます。また、フィルタ名ボックスで自分にわかりやすい名前を選択して[OK]をクリックします。追加したフィルタがlogCatの左ペインから選択されたときには、アプリケーションに関連するメッセージだけが表示されます。
試してみてください:ウィンドウ - >設定 - > Android - > LogCat。 "Logcatビューを表示する場合..."フィールドを値 "VERBOSE"に変更します。それは私を助けました。
Ionicを使用しているWindows 10では、 'findstr'とすべてのAppメッセージによって生成された "INFO:CONSOLE"を組み合わせることが私にとって一番効果的でした。だから、コマンドラインで私のコマンドは次のとおりです。
adb logcat | findstr INFO:CONSOLE
Logcatの中のフィルタを使うだけです。そこにあなたがフィルタを追加することを可能にするボタンがあります。アプリケーションIDを指定して、それが後で選択されていることを確認してください。
-s
!を使用
あなたはあなた自身のタグを使うべきです、見る: http://developer.Android.com/reference/Android/util/Log.html
好きです。
Log.d("AlexeysActivity","what you want to log");
そして、ログを読みたいときは>を使用してください。
adb logcat -s AlexeysActivity
同じタグを使用していないものはすべて除外されます。
Tom Mulcahyの答えに加えて、WindowsのコンソールでPIDでフィルタリングしたい場合は、次のような小さなバッチファイルを作成できます。
@ECHO OFF
:: find the process id of our app (2nd token)
FOR /F "tokens=1-2" %%A IN ('adb Shell ps ^| findstr com.example.my.package') DO SET PID=%%B
:: run logcat and filter the output by PID
adb logcat | findstr %PID%
Tom Mulcahyの答えを使おうとしましたが、残念ながらそれは複数のプロセスを持つアプリケーションではうまく機能しなかったので、自分のニーズに合うように編集しました。
#!/bin/bash
if [ "$#" -ne 1 ]; then echo "Illegal number of parameters"; exit 1; fi
echo "Lof for package name: $1"
PROCESSES=`adb Shell ps | grep "$1" | cut -c10-15`
NUM_OF_PROCESSES=`echo "$PROCESSES" | wc -l`
if [ $NUM_OF_PROCESSES -eq 0 ]; then echo "The application is not running!"; exit 1; fi
COUNTER=1
for process in $PROCESSES; do
if [ $COUNTER -eq 1 ]; then GREP_TEXT="("; fi
GREP_TEXT+=$process
if [ $COUNTER -eq $NUM_OF_PROCESSES ]; then GREP_TEXT+=")"; else GREP_TEXT+="|"; fi
let COUNTER=COUNTER+1
if [ $COUNTER -gt $NUM_OF_PROCESSES ]; then break; fi
done
adb logcat | grep -E "$GREP_TEXT"
これはおそらく最も簡単な解決策です。
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`"
保存されたフィルタバーに新しいフィルタを追加せずにフィルタするためにtag:nameofthetagまたはapp:nameoftheappと入力することが可能になりました
IntelliJ(そしておそらくEclipseでも)では、logcatの出力をtextwebviewでフィルタリングすることができるので、それは基本的にphonegapが作り出しているものすべてを出力します。
これは明らかに開発者デバイスのoutsideからLogcatを使用することを目的とした質問ですが、Logcatの出力を表示したい場合はonデバイス(プログラムによる)、あなたはこれが必要です:
Runtime.getRuntime().exec("logcat " + Android.os.Process.myPid() + " *:D");
最後の*:D
はデバッグログレベル以下のすべてのメッセージを除外しますが、それを除外することもできます。
出力を例えばTextViewに向けるために、例えばここで を見てください 。
Gavrielのapplog.sh
のさらに別の変種で、複数のプロセスを持つ複数のデバイスとアプリケーションをサポートしています。
#!/bin/sh
PKG=$1
shift
APPIDS=`adb $@ Shell ps | awk -v PKG="$PKG" '
(NR == 1){appcolumn=2; for (i=1; i<=NF; i++) if ($i=="PID") {appcolumn=i}}
index($0,PKG){print $(appcolumn)}' | paste -d \| -s`
echo "PID's: $APPIDS"
adb $@ logcat -v color | awk "(\$3 ~ /$APPIDS/){print \$0}"
使用法:applog.sh com.example.my.package [-s <specific device>]
Linuxでは、これは私のために働いた:
adb logcat | grep `adb Shell ps | grep your.package | awk '{print $2}'`