Ich habe festgestellt, dass ich bei Verwendung von Logcat mit Eclipse mit ADT für Android auch Nachrichten von vielen anderen Anwendungen erhalte. Gibt es eine Möglichkeit, dies zu filtern und nur Nachrichten aus meiner eigenen Anwendung anzuzeigen?
android
android-logcat
Vinod
quelle
quelle
Antworten:
Paketnamen sind garantiert eindeutig, sodass Sie die
Log
Funktion mit dem Tag als Paketnamen verwenden und dann nach Paketnamen filtern können :HINWEIS: Ab Build Tools 21.0.3 funktioniert dies nicht mehr, da TAGS auf maximal 23 Zeichen beschränkt sind.
Log.<log level>("<your package name>", "message");
adb -d logcat <your package name>:<log level> *:S
-d
bezeichnet ein tatsächliches Gerät und-e
bezeichnet einen Emulator. Wenn es mehr als 1 Emulator Sie verwenden können-s emulator-<emulator number>
(zB-s emulator-5558
)Beispiel:
adb -d logcat com.example.example:I *:S
Wenn Sie
System.out.print
Nachrichten an das Protokoll senden, können Sieadb -d logcat System.out:I *:S
nur Anrufe an System.out anzeigen.Alle Protokollebenen und weitere Informationen finden Sie hier: https://developer.android.com/studio/command-line/logcat.html
http://developer.android.com/reference/android/util/Log.html
EDIT: Sieht so aus, als hätte ich ein wenig mit der Waffe gesprungen und nur gemerkt, dass Sie in Eclipse nach Logcat gefragt haben. Was ich oben gepostet habe, ist für die Verwendung von logcat über adb über die Befehlszeile. Ich bin nicht sicher, ob dieselben Filter in Eclipse übertragen werden.
quelle
logcat <your package name>:<log level>
die Antwort verwenden, können Sie den Paketnamen als gültigen Filter verwenden. Ich musste die Antwort zweimal lesen, um zu verstehen, was sie tatsächlich sagt. Daher empfehle ich, die erste Zeile einfach in "logcat <tag>:<log level>
Wo<tag>
kann Ihr Paketname sein, wenn Sie sie auch als Tag in verwendenandroid.util.Log
" zu ändernLinux und OS X.
Verwenden Sie ps / grep / cut, um die PID zu ermitteln, und suchen Sie dann nach logcat-Einträgen mit dieser PID. Hier ist der Befehl, den ich benutze:
(Sie könnten den regulären Ausdruck weiter verbessern, um das theoretische Problem nicht verwandter Protokollzeilen mit derselben Nummer zu vermeiden, aber es war für mich nie ein Problem.)
Dies funktioniert auch, wenn mehrere Prozesse abgeglichen werden.
Windows
Unter Windows können Sie Folgendes tun:
quelle
pid=$(adb shell ps | grep "package-name" | cut -c10-15) && adb logcat | grep $pid
adb logcat | grep `adb shell ps | grep org.videolan.vlc | awk '{print $2")"}'`
adb logcat | findstr com.example.package
adb logcat | grep `adb shell ps | grep com.example.package | tr -s [:space:] ' ' | cut -d' ' -f2`
Seit Android 7.0 verfügt logcat über die Filteroption --pid, und der Befehl pidof ist verfügbar. Ersetzen Sie com.example.app durch Ihren Paketnamen.
(Ubuntu Terminal / Seit Android 7.0)
oder
Weitere Informationen zum Befehl pidof:
https://stackoverflow.com/a/15622698/7651532
quelle
grep
und ausprobiertfindstr
, aber sie filtern nur Protokolle mit einem bestimmten Wert, ausgenommen viele Nachrichten. Ihre Antwort ist die echte. Zeigen Sie alle Protokolle über die App an, ohne die Protokollnachricht aus anderen Bibliotheken auszuschließen. Es ist wie in Android Studio der aktuelle Filter "Nur ausgewählt anzeigen". Vielen Dank!Filter hinzufügen
Geben Sie Namen an
Wählen Sie Ihren Filter.
quelle
Für mich funktioniert dies in Mac.
Terminal
Gehen Sie zu dem Ordner, in dem Sie den folgenden
adb
Befehl im Terminal eingegeben habenHier werden alle Protokolle von
MyTAG
und gefiltertAndroidRuntime
quelle
Log.d("MyTAG", "i am hero"); Log.d("AndroidRunTime", "i am zero");
2) zum DEBUG-Login bei Android$ adb -s RKSCWSOV5SAIEUSC shell;
3)$ logcat MyTAG:V AndroidRuntime:E *:S
4) Jetzt wird ausführlich MyTAG und Fehler von AndroidRuntime angezeigtUpdate 17. Mai
Es ist ein paar Jahre her und die Dinge haben sich geändert. Und Eclipse wird nicht mehr offiziell unterstützt. Hier sind zwei weitere aktuelle Ansätze:
1. Android Studio
In der
Android monitor
Toolbox können Sie logcat pro filterndebuggable process
. Wenn Sie eine Anwendung entwickeln, handelt es sich normalerweise um einen debuggbaren Prozess. Hin und wieder habe ich Probleme damit und mache Folgendes:Tools
->Android
->Enable ADB Integration
.Wenn es bereits aktiviert war, schalten Sie es aus und wieder ein
Trennen Sie Ihr Mobilgerät vom Computer und schließen Sie es erneut an.
Es gibt auch Optionen zum Filtern über Regex und die Debug-Ebene
2. Logcat-Farbe
Dies ist ein netter Python-Wrapper,
adb logcat
wenn Sie eine terminalbasierte Lösung verwenden möchten. Das Gute daran ist, dass Sie mehrere Konfigurationen speichern und einfach wiederverwenden können. Das Filtern nachtags
ist sehr zuverlässig. Sie können auch filternpackage
, um nur Protokolle einer oder mehrerer Appslogcat-color
anzuzeigen. Sie beginnen jedoch direkt vor dem Start Ihrer App.Alte Antwort:
Es scheint, dass ich frühere Antworten nicht kommentieren kann, daher werde ich eine neue veröffentlichen. Dies ist ein Kommentar zu Tom Mulcahys Antwort, der zeigt, wie sich der Befehl ändern sollte, um auf den meisten Geräten zu funktionieren, da die
adb shell ps
PID-Spalte variabel ist.HINWEIS: Der folgende Befehl funktioniert in den Fällen, in denen Sie viele Geräte angeschlossen haben. Also
device id
wird gebraucht. Andernfalls können Sie einfach die Klammern '[', ']' weglassen.1. Um die Spalte von pid herauszufinden, geben Sie Folgendes ein:
Speichern Sie nun die Spaltennummer für die PID. Die Nummerierung beginnt ab
1
.2. Geben Sie dann Folgendes ein:
Fügen Sie einfach die Spalte ein, in der Sie sich gespeichert haben
PUT_COLUMN_HERE
, z$5
Vorbehalt
Jedes Mal, wenn Sie Ihre Anwendung erneut ausführen, müssen Sie den zweiten Befehl erneut ausführen, da die Anwendung vom Betriebssystem eine neue PID erhält.
quelle
Das hat bei mir in git bash funktioniert:
quelle
Setzen Sie dies auf applog.sh
dann:
applog.sh com.example.my.package
quelle
log.d("TAG", "multine\nlog")
zum Beispiel getan haben ):adb -d logcat -v long | sed -Ene '/^\[.*'" (${APPID}):"'.*\]/ { N; s/\n/ /; p; :a;' -e 'n; p; s/^.+$/foo/; t a;' -e ' }' | grep -v '^$'
- Ich habe das weggelassentr
, ich gehe davon aus , dass es auf Windows-Systemen benötigt wird, und ich habe dasAPPID
in Klammern gesetzt, um mehrere Pids zuzulassen (getrennt durch|
) .Dies funktioniert bei mir mit USB-Debugging:
Schließen Sie das Gerät an und verwenden Sie:
adb shell
Verwenden Sie den Logcat, wenn eine Verbindung besteht:
logcat | grep com.yourapp.packagename
quelle
Wenn Sie Android Studio verwenden , können Sie den Prozess auswählen, von dem Sie Logcats erhalten möchten. Hier ist der Screenshot.
quelle
Log cat has a new option (on by default) which creates an application filter automatically such that only the launched application's output is shown
Ich habe ein Shell-Skript zum Filtern von logcat nach Paketnamen geschrieben, das meiner Meinung nach zuverlässiger ist als die Verwendung
Es verwendet / proc / $ pid / cmdline, um die tatsächliche PID herauszufinden, und führt dann ein Grep für logcat durch
https://gist.github.com/kevinxucs/7340e1b1dd2239a2b04a
quelle
Mit ADT v15 für Eclipse können Sie einen Anwendungsnamen angeben (der tatsächlich der Paketwert in Ihrer androidmanifest.xml ist).
Ich liebe es, nach App filtern zu können, aber der neue Logcat hat einen Fehler mit dem Autoscroll. Wenn Sie ein wenig nach oben scrollen, um frühere Protokolle anzuzeigen, wird in wenigen Sekunden automatisch ein Bildlauf nach unten durchgeführt. Es scheint, als würde ein halber Weg nach oben im Protokoll verhindern, dass es nach unten zurückspringt, aber das ist oft nutzlos.
BEARBEITEN: Ich habe versucht, einen App-Filter über die Befehlszeile anzugeben - aber kein Glück. Wenn jemand dies herausfindet ODER wie man den Autoscroll stoppt, lass es mich wissen.
quelle
Verwenden der Windows-Eingabeaufforderung :
adb logcat -d | findstr <package>
.* Dies wurde zuerst von jj_ erwähnt , aber es hat ewig gedauert , bis ich es in den Kommentaren gefunden habe ...
quelle
Ubuntu: adb logcat -b alle -v Farbe --pid = `adb shell pidof -s com.packagename` Mit Farbe und fortlaufendem Protokoll der App
quelle
adb shell pidof ...
Bit hat bei mir nicht funktioniert, also habe ich michadb shell
in das Gerättop
pgrep
statt pidofAls Variante können Sie das Drittanbieter-Skript PID Cat von Jake Wharton verwenden. Dieses Skript hat zwei Hauptvorteile:
Aus der Dokumentation:
Eine Ausgabe sieht aus wie
quelle
Ich bin nicht sicher, ob es eine Möglichkeit gibt, nur Systemmeldungen zu Ihrer App anzuzeigen, aber Sie können anhand einer Zeichenfolge filtern. Wenn Sie ein Protokoll innerhalb des Programms erstellen, können Sie einfach ein bestimmtes eindeutiges Schlüsselwort einfügen und basierend auf diesem Wort filtern.
quelle
Versuchen Sie: Fenster -> Einstellungen -> Android -> LogCat. Ändern Sie im Feld "Logcat-Ansicht anzeigen, wenn ..." den Wert "VERBOSE". Es hat mir geholfen.
quelle
Wenn Sie Eclipse verwenden , drücken Sie das grüne + Zeichen im logCat- Fenster unten und geben Sie Ihren Paketnamen (com.example.yourappname) in das Feld nach Anwendungsname ein . Zudem wählen Sie einen beliebigen Namen für Sie angenehm in Filter Name Feld und klicken Sie auf OK. Sie sehen nur Nachrichten zu Ihrer Anwendung, wenn der gerade hinzugefügte Filter im linken Bereich der logCat ausgewählt wird.
quelle
Geben Sie Ihrem Protokoll einen Namen. Ich nannte meine "Wawa".
Gehen Sie in Android Studio zu Android-> Filterkonfigurationen bearbeiten
Geben Sie dann den Namen ein, den Sie den Protokollen gegeben haben. In meinem Fall heißt es "wawa". Hier sind einige Beispiele für die Filtertypen, die Sie ausführen können. Sie können nach System.out, System.err, Protokollen oder Paketnamen filtern:
quelle
Dies ist wahrscheinlich die einfachste Lösung.
Zusätzlich zu einer Lösung von Tom Mulcahy können Sie sie wie folgt weiter vereinfachen:
Die Verwendung ist als normaler Alias einfach. Geben Sie einfach den Befehl in Ihre Shell ein:
Das Alias-Setup macht es praktisch. Und der reguläre Ausdruck macht ihn robust für Apps mit mehreren Prozessen, vorausgesetzt, Sie kümmern sich nur um den Hauptprozess.
Natürlich können Sie für jeden Prozess weitere Aliase festlegen, wie Sie möchten. Oder verwenden Sie die Lösung von Hegazy. :) :)
Wenn Sie außerdem Protokollierungsstufen festlegen möchten, ist dies der Fall
quelle
Unter Windows 10 mit Ionic funktionierte es für mich hervorragend, 'findstr' mit dem von allen App-Nachrichten generierten "INFO: CONSOLE" zu kombinieren. Mein Befehl in der Kommandozeile lautet also:
quelle
Ich habe versucht, die Antwort von Tom Mulcahy zu verwenden, aber leider funktionierte sie nicht für Anwendungen mit mehreren Prozessen, sodass ich sie an meine Bedürfnisse anpasse.
quelle
Verwenden Sie
-s
!Quelle
quelle
Zusätzlich zur Antwort von Tom Mulcahy können Sie, wenn Sie auf der Windows-Konsole nach PID filtern möchten, eine kleine Batchdatei wie folgt erstellen:
quelle
Dies ist offensichtlich eine Frage, die auf die Verwendung von Logcat von außerhalb des Entwicklergeräts abzielt. Wenn Sie jedoch die Logcat-Ausgabe (programmgesteuert) auf dem Gerät anzeigen möchten , benötigen Sie nur Folgendes :
Das
*:D
am Ende filtert jede Nachricht unterhalb der Debug-Protokollstufe heraus, aber Sie können das weglassen.Informationen zum Leiten der Ausgabe beispielsweise in eine Textansicht finden Sie hier .
quelle
Jetzt können Sie tag: nameofthetag oder app: nameoftheapp eingeben, um zu filtern, ohne der gespeicherten Filterleiste neue Filter hinzuzufügen
quelle
In IntelliJ (und wahrscheinlich auch in Eclipse) können Sie die Logcat-Ausgabe nach Text- Webview filtern , sodass im Grunde alles gedruckt wird, was Phonegap produziert
quelle
Eine weitere Variante von Gavriel
applog.sh
mit Unterstützung mehrerer Geräte und Anwendungen mit mehreren Prozessen:Verwendungszweck:
applog.sh com.example.my.package [-s <specific device>]
quelle
Unter Linux hat das bei mir funktioniert:
quelle