Programing

Android의 내 응용 프로그램에서 보낸 메시지 만 가져 오려면 LogCat을 필터링 하시겠습니까?

lottogame 2020. 3. 10. 08:19
반응형

Android의 내 응용 프로그램에서 보낸 메시지 만 가져 오려면 LogCat을 필터링 하시겠습니까?


Android 용 ADT와 함께 Eclipse와 함께 Logcat을 사용하면 다른 많은 응용 프로그램에서도 메시지를 볼 수 있습니다. 이것을 필터링하고 내 응용 프로그램의 메시지 만 표시하는 방법이 있습니까?


패키지 이름은 고유하므로 태그와 함께 함수를 패키지 이름으로 사용하고 패키지 이름으로 필터링 할 수 있습니다Log .

참고 : 빌드 도구 21.0.3부터 TAGS가 23 자 이하로 제한되어 더 이상 작동하지 않습니다.

Log.<log level>("<your package name>", "message");

adb -d logcat <your package name>:<log level> *:S

-d는 실제 장치를 -e나타내며 에뮬레이터를 나타냅니다. 있다면 당신이 사용할 수있는 실행 1 개 이상 에뮬레이터 -s emulator-<emulator number>(예 -s emulator-5558)

예: adb -d logcat com.example.example:I *:S

또는 System.out.print메시지를 로그에 보내는 데 사용 하는 경우 adb -d logcat System.out:I *:SSystem.out에 대한 호출 만 표시 하는 사용할 수 있습니다 .

https://developer.android.com/studio/command-line/logcat.html 에서 모든 로그 수준과 자세한 정보를 찾을 수 있습니다.

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

편집 : 나는 총을 약간 뛰어 넘고 Eclipse에서 logcat에 대해 묻는다는 것을 깨달았습니다. 위에서 게시 한 것은 명령 줄에서 adb를 통해 logcat을 사용하는 것입니다. 동일한 필터가 Eclipse로 전송되는지 확실하지 않습니다.


리눅스와 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에서는 다음을 수행 할 수 있습니다.

adb logcat | findstr com.example.package

필터 추가

필터 추가

이름을 지정하십시오

여기에 이미지 설명을 입력하십시오

필터를 선택하십시오.

여기에 이미지 설명을 입력하십시오


Android 7.0부터 logcat에는 --pid 필터 옵션이 있으며 pidof 명령을 사용할 수 있으므로 com.example.app을 패키지 이름으로 바꾸십시오.
(우분투 단말기 / 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


5 월 17 일 업데이트

몇 년이 지났고 일이 바뀌 었습니다. 그리고 Eclipse는 더 이상 공식적으로 지원되지 않습니다. 따라서 여기에는 두 가지 최신 접근 방식이 있습니다.

1. 안드로이드 스튜디오

여기에 이미지 설명을 입력하십시오에서 Android monitor도구 상자, 당신은 로그 캣의 당을 필터링 할 수 있습니다 debuggable process. 일반적으로 응용 프로그램을 개발할 때는 디버깅 가능한 프로세스입니다. 가끔씩 나는 이것에 문제가 있으며 다음을 수행하십시오.

  1. Tools-> Android-> Enable ADB Integration.
    이미 활성화되어 있으면 끄고 다시 켭니다.

  2. 모바일 장치를 분리했다가 다시 연결하십시오.

정규식과 디버그 수준을 통해 필터링하는 옵션도 있습니다

2. 로그 캣 색상

adb logcat터미널 기반 솔루션을 사용하려는 경우 멋진 파이썬 래퍼입니다 . 그것에 대한 좋은 점은 여러 구성을 저장하고 간단히 재사용 할 수 있다는 것입니다. 필터링 기준 tags은 매우 안정적입니다. 필터링하여 package하나 이상의 앱 로그 만 볼 수 있지만 앱을 시작 logcat-color하기 직전에 시작합니다.

기존 답변 :

이전 답변에 댓글을 달 수 없으므로 새 답변을 게시 할 것입니다. 이것은 PID Mulcahy 의 답변에 대한 주석 이며 adb shell psPID 열은 가변적 이므로 대부분의 장치에서 작동하도록 명령이 어떻게 변경되어야하는지 보여줍니다 .

참고 : 아래 명령은 많은 장치를 연결 한 경우에 작동합니다. 그래서 device id필요합니다. 그렇지 않으면 괄호 '[', ']'를 생략하면됩니다.

1. pid 열을 찾으려면 다음을 입력하십시오.

adb [-s DEVICE_ID] shell ps | head -n 1

이제 PID의 열 번호를 기억하십시오. 번호 매기기는에서 시작합니다 1.

그런 다음 다음을 입력하십시오.

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를 가져 오기 때문에 응용 프로그램을 다시 실행할 때마다 두 번째 명령을 다시 실행해야합니다.


이것은 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


Android Studio사용하는 경우 로그 캣을 수신 할 프로세스를 선택할 수 있습니다. 스크린 샷입니다.

여기에 이미지 설명을 입력하십시오


패키지 이름으로 logcat을 필터링하기위한 쉘 스크립트를 작성했습니다.

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

/ proc / $ pid / cmdline을 사용하여 실제 pid를 찾은 다음 logcat에서 grep을 수행합니다.

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


Eclipse 용 ADT v15를 사용하면 애플리케이션 이름 (실제로 androidmanifest.xml의 패키지 값)을 지정할 수 있습니다.

앱별로 필터링 할 수는 있지만 새로운 logcat에는 자동 스크롤에 버그가 있습니다. 이전 로그를보기 위해 약간 위로 스크롤하면 몇 초 후에 자동으로 맨 아래로 다시 스크롤됩니다. 로그를 1/2 위로 올리면 로그가 맨 아래로 돌아 가지 못하게되지만 종종 쓸모가 없습니다.

편집 : 명령 줄에서 앱 필터를 지정하려고했지만 운이 없습니다. 누군가 이것을 알아 내거나 자동 스크롤을 멈추는 방법을 알려주세요.


Windows 명령 프롬프트 사용 : adb logcat -d | findstr <package>.

* 이것은 jj_의해 처음 언급 되었지만 주석에서 그것을 찾는 데 오랜 시간이 걸렸습니다 ...


이것은 USB 디버깅에서 저에게 효과적입니다.

  1. 장치를 연결하고 다음을 사용하십시오.

    adb shell

  2. logcat을 간단하게 사용하십시오.

    logcat | grep com.youapp.packagename


우분투 : adb logcat -b all -v color --pid =`adb shell pidof -s com.packagename` 앱의 색상과 연속 로그


앱과 관련된 시스템 메시지 만 볼 수있는 방법이 확실하지 않지만 문자열을 기준으로 필터링 할 수 있습니다. 프로그램 내에서 로그를 작성하는 경우 특정 고유 키워드를 포함시키고 해당 단어를 기준으로 필터링하면됩니다.


logcat 내부의 필터를 사용하십시오. 필터를 추가 할 수있는 버튼이 있습니다. 응용 프로그램 ID를 지정하고 나중에 선택했는지 확인하면 완료됩니다.


시도 : 창-> 환경 설정-> Android-> LogCat. "..."이면 "로그 캣보기 표시"필드를 "VERBOSE"로 변경하십시오. 그것은 나를 도왔다.


Eclipse 를 사용하는 경우 아래 logCat에서 녹색 + 기호누르고 애플리케이션 이름 상자 에 패키지 이름 (com.example.yourappname)을 입력하십시오 . 또한 필터 이름 상자 에서 원하는 이름을 선택 하고 확인을 클릭하십시오. 방금 추가 한 필터를 logCat의 왼쪽 창에서 선택하면 응용 프로그램과 관련된 메시지 만 표시됩니다.


로그 이름을 지정하십시오. 나는 "wawa"라고 불렀다.

여기에 이미지 설명을 입력하십시오

Android Studio에서 Android-> 필터 구성 편집으로 이동하십시오.

여기에 이미지 설명을 입력하십시오

그런 다음 로그에 지정한 이름을 입력하십시오. 제 경우에는 "wawa"라고합니다. 다음은 수행 할 수있는 필터 유형의 예입니다. System.out, System.err, 로그 또는 패키지 이름으로 필터링 할 수 있습니다.

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오


On Windows 10, using Ionic, what worked great to me was combine 'findstr' with the "INFO:CONSOLE" generated by all App messages. So, my command in command line is:

adb logcat | findstr INFO:CONSOLE

As a variant you can use third party script PID Cat by Jake Wharton. This script has two major advantages:

  • shows log entries for processes from a specific application package
  • color logcat

From documentation:

During application development you often want to only display log messages coming from your app. Unfortunately, because the process ID changes every time you deploy to the phone it becomes a challenge to grep for the right thing.

This script solves that problem by filtering by application package.

An output looks like 여기에 이미지 설명을 입력하십시오


I tried to use Tom Mulcahy's answer but unfortunately it was not working for applications with multiple processes so I edit it to fit my needs.

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

This is probably the simplest solution.

On top of a solution from Tom Mulcahy, you can further simplify it like below:

alias logcat="adb logcat | grep `adb shell ps | egrep '\bcom.your.package.name\b' | cut -c10-15`"

Usage is easy as normal alias. Just type the command in your shell:

logcat

The alias setup makes it handy. And the regex makes it robust for multi-process apps, assuming you care about the main process only.

Of coz you can set more aliases for each process as you please. Or use hegazy's solution. :)

In addition, if you want to set logging levels, it is

alias logcat-w="adb logcat *:W | grep `adb shell ps | egrep '\bcom.your.package.name\b' | cut -c10-15`"

Use -s !

You should use your own tag, look at: http://developer.android.com/reference/android/util/Log.html

Like.

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

And then when you want to read the log use>

adb logcat -s AlexeysActivity

That filters out everything that doesn't use the same tag.

Source


In addition to Tom Mulcahy's answer, if you want to filter by PID on Windows' console, you can create a little batch file like that:

@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%

This is obviously a question aimed at usage of Logcat from outside of the developer device, however if you want to display Logcat output on the device (programmatically), you just need this:

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

The *:D at the end filters out every message below Debug log level but you can leave that out.

To direct the output to, say, a TextView, see for example here.


Now is possible to type tag:nameofthetag or app:nameoftheapp to filter without adding new filters to the saved filters bar


intelliJ (및 아마도 일식에서도)는 텍스트 webview로 logcat 출력을 필터링 할 수 있으므로 기본적으로 phonegap이 생성하는 모든 것을 인쇄합니다


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


리눅스에서 이것은 나를 위해 일했습니다 :

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

참고 URL : https://stackoverflow.com/questions/6854127/filter-logcat-to-get-only-the-messages-from-my-application-in-android

반응형