409

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

4

35 に答える 35

419

LinuxとOSX

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
于 2012-03-26T09:26:35.553 に答える
309

パッケージ名は一意であることが保証されているため、パッケージ名としてタグを使用してLog関数を使用し、パッケージ名でフィルタリングできます

注:ビルドツール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、ログにメッセージを送信するために使用している場合adb -d logcat System.out:I *:Sは、System.outへの呼び出しのみを表示するために使用できます。

ここですべてのログレベルと詳細情報を見つけることができます:https ://developer.android.com/studio/command-line/logcat.html

http://developer.android.com/reference/android/util/Log.html

編集:私は少し銃を飛び越えて、Eclipseでlogcatについて質問していることに気づいたようです。上に投稿したのは、コマンドラインからadbを介してlogcatを使用するためのものです。同じフィルターがEclipseに転送されるかどうかはわかりません。

于 2011-07-28T04:43:01.893 に答える
116

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をご覧ください。

于 2017-12-28T08:25:32.700 に答える
54

フィルタを追加

フィルタを追加

名前を指定する

ここに画像の説明を入力してください

フィルタを選択してください。

ここに画像の説明を入力してください

于 2013-08-02T08:17:31.580 に答える
29

これは、USBデバッグで機能します。

解決策は、シェルを介してデバイス自体のlogcatを直接使用することです。

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

    adb shell

  2. シェルのセットアップ後にlogcatを使用します。

    logcat | grep com.yourapp.packagename

于 2017-01-31T14:10:20.100 に答える
19

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

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

MyTAGここでは、とのすべてのログをフィルタリングしますAndroidRuntime

于 2014-05-08T05:40:05.083 に答える
12

5月17日更新

数年経ちましたが、状況は変わりました。また、Eclipseは正式にサポートされなくなりました。したがって、ここにさらに2つの最新のアプローチがあります。

1. Android Studio

ここに画像の説明を入力してください ツールボックスでは、Android monitorlogcatをごとにフィルタリングできますdebuggable process。通常、アプリケーションを開発するとき、それはデバッグ可能なプロセスです。時々私はこれに問題があり、次のことをします:

  1. Tools-> Android-> Enable ADB Integration
    すでに有効になっている場合は、オフに切り替えてからオンに戻します

  2. モバイルデバイスのプラグを抜き、再度差し込みます。

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

2.logcat -color

adb logcatこれは、ターミナルベースのソリューションを使用する場合に加えて、優れたPythonラッパーです。それの良いところは、複数の構成を保存して、それらを単に再利用できることです。によるフィルタリングtagsは非常に信頼性があります。package1つ以上のアプリのログのみを表示するようにフィルタリングすることもできますがlogcat-color、アプリを起動する直前に開始します。

古い答え:

以前の回答にはコメントできないようですので、新しい回答を投稿します。これはTomMulcahyadb 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番目のコマンドを再実行する必要があります。

于 2012-04-20T02:44:23.210 に答える
11

これはgitbashで私のために働いています:

$ pid=$(adb shell ps | grep <package name> | cut -c11-15) ; adb logcat | grep $pid
于 2014-03-09T00:48:18.683 に答える
10

Ubuntu: adb logcat -b all -v color --pid = `adb shell pidof-scom.packagename`アプリの色と継続的なログ

于 2019-01-24T07:38:46.593 に答える
9

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

于 2014-08-05T18:41:54.107 に答える
7

Android Studioを使用している場合は、logcatを受信するプロセスを選択できます。これがスクリーンショットです。

ここに画像の説明を入力してください

于 2013-11-17T07:35:36.487 に答える
7

logcatをパッケージ名でフィルタリングするためのシェルスクリプトを作成しました。これは、使用するよりも信頼性が高いと思います。

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

/ proc / $ pid / cmdlineを使用して実際のpidを見つけ、logcatでgrepを実行します

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

于 2014-05-23T01:46:18.433 に答える
7

使用してください-s

独自のタグを使用する必要があります。http: //developer.android.com/reference/android/util/Log.htmlをご覧ください。

好き。

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

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

adb logcat -s AlexeysActivity

これにより、同じタグを使用しないものがすべて除外されます。

ソース

于 2016-05-14T11:46:54.877 に答える
7

Windowsコマンドプロンプトの使用:adb logcat -d | findstr <package>

*これはjj_によって最初に言及されましたが、コメントでそれを見つけるのに何年もかかりました...

于 2016-05-28T08:15:30.263 に答える
6

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

アプリでフィルタリングできるのは気に入っていますが、新しいlogcatには自動スクロールのバグがあります。少し上にスクロールして前のログを確認すると、数秒で自動的に一番下にスクロールして戻ります。ログを1/2ほど上にスクロールすると、ログが一番下に戻るのを防ぐことができますが、それは役に立たないことがよくあります。

編集:コマンドラインからアプリフィルターを指定しようとしましたが、うまくいきませんでした。誰かがこれを理解したり、自動スクロールを停止する方法を見つけたら、私に知らせてください。

于 2011-11-13T20:27:47.230 に答える
6

バリアントとして、JakeWhartonによるサードパーティのスクリプトPIDCatを使用できます。このスクリプトには2つの大きな利点があります。

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

ドキュメントから:

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

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

出力は次のようになります ここに画像の説明を入力してください

于 2018-06-21T20:26:15.287 に答える
3

Windows 10では、Ionicを使用して、「findstr」をすべてのアプリメッセージによって生成された「INFO:CONSOLE」と組み合わせることでうまくいきました。したがって、コマンドラインでの私のコマンドは次のとおりです。

adb logcat | findstr INFO:CONSOLE
于 2017-12-21T23:33:45.420 に答える
3

logcatにアクセスするには、最初にADBコマンドラインツールをインストールする必要があります。ADBコマンドラインツールはAndroidStudioプラットフォームツールの一部であり、ここからダウンロードできます。この後、adbツールのパス/環境変数を設定する必要があります。これで、MacBookを使用している場合は、Eclipseターミナル/IntelliJターミナルまたはMacターミナルからlogcatにアクセスできます。

adb logcat:logcat全体を取得します。

adb shell pidof 'com.example.debug':アプリのプロセスIDを取得します。

adb logcat pid=<pid>:アプリに固有のlogcatを取得します。

adb logcat pid=<pid>|grep 'sometext':テキストに基づいてlogcatをフィルタリングします。

logcatのフィルタリングの詳細については、こちらをお読みください

于 2021-03-16T06:08:43.617 に答える
2

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

于 2011-07-28T04:39:56.647 に答える
2

試してください:[ウィンドウ]->[設定]->[Android]->[LogCat]。フィールド「Showlogcatviewif...」の値を「VERBOSE」に変更します。それは私を助けました。

于 2012-12-06T15:50:38.803 に答える
2

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

于 2013-01-25T01:12:31.393 に答える
2

ログに名前を付けます。私は私のものを「ワワ」と呼んだ。

ここに画像の説明を入力してください

Android Studioで、[Android]->[フィルター構成の編集]に移動します

ここに画像の説明を入力してください

次に、ログに付けた名前を入力します。私の場合、それは「ワワ」と呼ばれています。実行できるフィルターの種類の例を次に示します。System.out、System.err、Logs、またはパッケージ名でフィルタリングできます。

ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください

于 2015-04-20T19:47:09.317 に答える
2

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

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`"
于 2015-11-11T18:22:18.233 に答える
2

私には別のアプローチがあります。ローカルデバイスのシェルへのアクセスを試すことができます。

adb shell

その後、

logcat | grep com.package.name

これは、そのパッケージを含むすべてを印刷します。

または、試すことができますflutter logs --verbose

于 2021-11-10T18:07:34.370 に答える
1

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"
于 2015-08-31T16:10:47.307 に答える
1

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%
于 2017-03-11T18:31:08.270 に答える
1

Windowsの場合、PowerShellスクリプトを使用して、アプリのメッセージのみを表示できます: https ://github.com/AlShevelev/power_shell_logcat

于 2020-11-08T16:11:50.967 に答える
1

以下のコマンドを使用して、アプリケーションパッケージの詳細ログを取得できます

adb logcat com.example.myapp:V *:S

また、アプリをロールアウトしていて、リリースされたアプリからエラーログを取得する場合は、以下のコマンドを使用できます。

adb logcat AndroidRuntime:E *:S

于 2020-12-16T05:13:37.607 に答える
1

私は通常、ログメッセージに何かを追加して区別します。または、たとえばUnityアプリでは、一致する文字列として「Unity」を使用できます。

Mac用 :

adb logcat | grep "MyUniqueString" 

Windowsの場合(PowerShell):

adb logcat | Select-String "MyUniqueString"
于 2021-08-18T10:55:54.117 に答える
0

保存されたフィルターバーに新しいフィルターを追加せずに、tag:nameofthetagまたはapp:nameoftheappと入力してフィルター処理できるようになりました

于 2014-03-10T10:17:12.740 に答える
0

intelliJ(そしておそらくEclipseでも)では、logcat出力をテキストwebviewでフィルタリングできるため、基本的にphonegapが生成するすべてのものを印刷します

于 2014-07-01T06:23:29.387 に答える
0

applog.sh複数のプロセスを持つ複数のデバイスとアプリケーションをサポートするGavrielのさらに別のバリアント:

#!/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>]

于 2016-04-02T03:30:42.947 に答える
0

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

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

最後に、*:Dデバッグログレベルより下のすべてのメッセージを除外しますが、それを省略できます。

たとえば、出力をTextViewに送信するには、たとえばここを参照してください。

于 2017-08-06T21:04:41.263 に答える
0

シェル内にいるときに正確なパッケージ名のログを取得する別の方法:

logcat --pid $(ps -ef | grep -E "com.example.app\$" | awk '{print $2}') 
于 2022-01-10T11:47:17.197 に答える
-2

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

adb logcat | grep `adb shell ps | grep your.package | awk '{print $2}'`
于 2018-08-30T18:36:03.733 に答える