web-dev-qa-db-ja.com

Androidのマイアプリケーションからのメッセージのみを取得するようにLogCatをフィルタリングしますか?

LogcatをEclipseでADT for Androidとともに使用すると、他の多くのアプリケーションからもメッセージが表示されることを確認しました。これをフィルタリングして、自分のアプリケーションからのメッセージだけを表示する方法はありますか。

290
Vinod

パッケージ名は一意であることが保証されているので、タグをパッケージ名として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に転送されるかどうかはわかりません。

230
shanet

LinuxとOS X

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

Windowsでは、次のことができます。

adb logcat | findstr com.example.package
332
Tom Mulcahy

フィルターを追加

Add filter

名前を指定してください

enter image description here

あなたのフィルタを選択してください。

enter image description here

51
beryllium

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

28
You Kim

私にとってはこれはmacで動作しますTerminal
adbがあるフォルダに移動し、ターミナルに以下のコマンドを入力してください

./adb logcat MyTAG:V AndroidRuntime:E *:S

ここではMyTAGAndroidRuntimeのすべてのログをフィルタリングします。

18

5月17日に更新

それは数年経ちました、そして、事は変わりました。そしてEclipseは正式にサポートされなくなりました。それで、ここにもう2つの最新のアプローチがあります:

1.アンドロイドスタジオ

enter image description hereAndroid monitorツールボックスで、debuggable processごとにlogcatをフィルタリングできます。通常、アプリケーションを開発するとき、それはデバッグ可能なプロセスです。時々私はこれに関して問題を抱えています、そして、以下をしてください:

  1. Tools - > Android - > Enable ADB Integration
    既に有効になっている場合は、オフにしてからもう一度オンにします。

  2. あなたのモバイル機器のプラグを抜き、差し直してください。

正規表現とデバッグレベルでフィルタリングするオプションもあります。

2. logcat-color

端末ベースのソリューションを使用したい場合は、これは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番目のコマンドを再実行する必要があります。

13
Paschalis

これは私にとってgit bashでうまくいっています:

$ pid=$(adb Shell ps | grep <package name> | cut -c11-15) ; adb logcat | grep $pid
10
wubwubb

これを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

9
Gavriel

私はlogcatをパッケージ名でフィルタリングするためのシェルスクリプトを書きました。

ps | grep com.example.package | cut -c10-15

実際のpidを見つけるために/ proc/$ pid/cmdlineを使い、その後logcatにgrepを実行します。

https://Gist.github.com/kevinxucs/7340e1b1dd2239a2b04a

7
kevin

これは私にとってUSBデバッグで機能します。

  1. デバイスを接続して使用します。

    adb Shell

  2. Logcatを使うだけです:

    logcat | grep com.youapp.packagename

6
Lennoard Silva

Eclipse用のADT v15では、アプリケーション名を指定できます(実際にはandroidmanifest.xmlのpackage値です)。

私はアプリでフィルタリングできることが大好きですが、新しいlogcatには自動スクロールに関するバグがあります。以前のログを見るために少し上にスクロールすると、2、3秒で自動的に下にスクロールします。ログを1/2上にスクロールしても、ログが下に戻るのを防ぐことはできますが、多くの場合は役に立ちません。

編集:私はコマンドラインからアプリのフィルタを指定しようとした - しかし運が悪い。誰かがこれを見つけたらORどのように自動スクロールを止めるか、私に知らせてください。

6
Aaron T Harris

Windowsのコマンドプロンプトでadb logcat -d | findstr <package>を使用します。

*これは jj _ によって最初に言及されました、しかしそれはコメントでそれを見つけるのに年齢を要しました...

6
rareclass

あなたがAndroid Studioを使っているなら、あなたはあなたがログキャットを受け取りたいプロセスを選ぶことができます。これがスクリーンショットです。

enter image description here

6
dmSherazi

Ubuntu:adb logcat -b all -v color --pid = `adbシェルpidof -s com.packagename`アプリの色と連続ログ

3
Sandeep PC

アプリに関するシステムメッセージだけを表示する方法があるかどうかはわかりませんが、文字列に基づいてフィルタをかけることができます。プログラム内でログを作成している場合は、特定の一意のキーワードを含めるだけで、そのWordに基づいてフィルタリングできます。

2
bjpcomet

ログに名前を付けます。私は私のことを「和」と呼びました。

enter image description here

Android Studioで、Android-> Edit Filter Configurationsに移動します。

enter image description here

次に、ログに付けた名前を入力します。私の場合、それは "wawa"と呼ばれています。ここにあなたができるフィルターの種類のいくつかの例があります。 System.out、System.err、Logs、またはパッケージ名でフィルタリングできます。

enter image description hereenter image description hereenter image description here

2
Gene

Eclipse を使用している場合は、下の logCat ウィンドウで緑色の+記号を押してください。パッケージ名(com.example.yourappname)を by Application Name ボックスに入れます。また、フィルタ名ボックスで自分にわかりやすい名前を選択して[OK]をクリックします。追加したフィルタがlogCatの左ペインから選択されたときには、アプリケーションに関連するメッセージだけが表示されます。

2
Khaled Alanezi

試してみてください:ウィンドウ - >設定 - > Android - > LogCat。 "Logcatビューを表示する場合..."フィールドを値 "VERBOSE"に変更します。それは私を助けました。

2
Siruk Viktor

変形として、あなたはJake Whartonによるサードパーティのスクリプト PID Cat を使うことができます。このスクリプトには2つの大きな利点があります。

  • 特定のアプリケーションパッケージからのプロセスのログエントリを表示します。
  • カラーログキャット

ドキュメントから:

アプリケーション開発中は、アプリからのログメッセージのみを表示したいことがよくあります。残念なことに、プロセスIDは電話にデプロイするたびに変わるので、正しいことをgrepするのは難題になります。

このスクリプトは、アプリケーションパッケージでフィルタリングすることでこの問題を解決します。

出力は のようになります。enter image description here

2
yoAlex5

Ionicを使用しているWindows 10では、 'findstr'とすべてのAppメッセージによって生成された "INFO:CONSOLE"を組み合わせることが私にとって一番効果的でした。だから、コマンドラインで私のコマンドは次のとおりです。

adb logcat | findstr INFO:CONSOLE
2
Lud Akell

Logcatの中のフィルタを使うだけです。そこにあなたがフィルタを追加することを可能にするボタンがあります。アプリケーションIDを指定して、それが後で選択されていることを確認してください。

2
Gerard

-sを使用

あなたはあなた自身のタグを使うべきです、見る: http://developer.Android.com/reference/Android/util/Log.html

好きです。

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

そして、ログを読みたいときは>を使用してください。

adb logcat -s AlexeysActivity

同じタグを使用していないものはすべて除外されます。

出典

1
KrisWebDev

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%
1
Lawyno

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"
1
Ahmed Hegazy

これはおそらく最も簡単な解決策です。

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`"
1
Frank Du

保存されたフィルタバーに新しいフィルタを追加せずにフィルタするためにtag:nameofthetagまたはapp:nameoftheappと入力することが可能になりました

0

IntelliJ(そしておそらくEclipseでも)では、logcatの出力をtextwebviewでフィルタリングすることができるので、それは基本的にphonegapが作り出しているものすべてを出力します。

0

これは明らかに開発者デバイスのoutsideからLogcatを使用することを目的とした質問ですが、Logcatの出力を表示したい場合はonデバイス(プログラムによる)、あなたはこれが必要です:

Runtime.getRuntime().exec("logcat " + Android.os.Process.myPid() + " *:D");

最後の*:Dはデバッグログレベル以下のすべてのメッセージを除外しますが、それを除外することもできます。

出力を例えばTextViewに向けるために、例えばここで を見てください

0
Tom Ladek

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>]

0
ls.illarionov

Linuxでは、これは私のために働いた:

adb logcat | grep `adb Shell ps | grep your.package | awk '{print $2}'`
0
spectralsun