programing

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

abcjava 2023. 5. 31. 14:03
반응형

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

안드로이드용 이클립스와 함께 로그캣을 ADT와 함께 사용하면 다른 많은 애플리케이션에서도 메시지가 표시되는 것을 관찰했습니다.이것을 필터링하고 내 응용 프로그램의 메시지만 표시할 수 있는 방법이 있습니까?

리눅스 및 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

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

참고: 빌드 도구 21.0.3부터는 태그가 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시스템에 대한 호출만 표시합니다.나가.

모든 로그 수준 및 자세한 정보는 https://developer.android.com/studio/command-line/logcat.html 에서 확인할 수 있습니다.

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

편집: 저는 조금 성급한 생각을 한 것 같습니다. 그리고 방금 당신이 이클립스의 로그캣에 대해 묻고 있다는 것을 깨달았습니다.위에 올린 글은 명령줄에서 adb를 통해 logcat을 사용하기 위한 것입니다.동일한 필터가 이클립스로 전송되는지 확실하지 않습니다.

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://.com/a/15622698/7651532https ://stackoverflow.com/a/15622698/7651532

필터 추가

필터 추가

이름 지정

여기에 이미지 설명 입력

필터를 선택합니다.

여기에 이미지 설명 입력

USB 디버깅을 사용하면 다음과 같이 작동합니다.

해결책은 셸을 통해 직접 장치의 로그캣을 사용하는 것입니다.

  1. 장치를 연결하고 다음을 사용합니다.

    adb shell

  2. 셸이 설정된 후 logcat 사용:

    logcat | grep com.yourapp.packagename

나에게 이것은 맥에서 작동합니다.Terminal
있는 했습니다.adb에 아래 명령을 합니다.

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

에서는 여서모로필다니합터의 .MyTAG그리고.AndroidRuntime

5월 17일 업데이트

몇 년이 지났고, 상황이 변했습니다.그리고 이클립스는 더 이상 공식적으로 지원되지 않습니다.다음은 두 가지 더 최신 접근 방식입니다.

안드로이드 스튜디오

여기에 이미지 설명 입력 에서Android monitor을 필터링할 수 .debuggable process일반적으로 응용프로그램을 개발할 때 디버깅할 수 있는 프로세스입니다.가끔 이 문제로 인해 문제가 발생하고 다음을 수행합니다.

  1. Tools->Android->Enable ADB Integration.
    활성화되어 .

  2. 모바일 장치의 플러그를 뽑고 다시 꽂습니다.

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

로그캣 컬러

이것은 위에 있는 멋진 파이썬 포장지입니다.adb logcat터미널 기반 솔루션을 사용하려는 경우좋은 점은 여러 구성을 저장하고 재사용할 수 있다는 것입니다.에 의한 tags꽤 믿을 만합니다.다음을 기준으로 필터링할 수도 있습니다.package logcat-color앱을 실행하기 직전에.

이전 답변:

이전 답변에 대해서는 코멘트를 할 수 없는 것 같으니, 새로운 답변을 올리겠습니다.이는 Tom Mulcahy의 답변에 대한 코멘트로, 대부분의 장치에서 작동하기 위해 명령이 어떻게 변경되어야 하는지를 보여줍니다.adb shell psPID 열은 변수입니다.

참고: 아래 명령은 많은 장치를 연결한 경우에 사용할 수 있습니다.그렇게device id '[,' ','는 생략하면 .

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를 가져오기 때문입니다.

Ubuntu : adblogcat -ball -v color --pid='adb shell pidof -s com.packagename' 색상 및 연속 로그 앱

이것은 나에게 효과가 있었습니다.

$ pid=$(adb shell ps | grep <package name> | cut -c11-15) ; adb logcat | grep $pid
adb logcat -e "appname" 

이 기능은 하나의 앱에 대한 행만 필터링할 때 제대로 작동합니다.

이것을 applog에 넣습니다.

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

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

*JJ_가 처음 언급한 내용인데 댓글에서 찾는 데 오래 걸렸어요...

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

여기에 이미지 설명 입력

패키지 이름별로 logcat을 필터링하기 위한 셸 스크립트를 작성했는데, 사용하는 것보다 더 신뢰할 수 있다고 생각합니다.

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

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

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

사용하다-s!

당신은 당신만의 태그를 사용해야 합니다. http://developer.android.com/reference/android/util/Log.html 을 보세요.

맘에 들다.

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

그런 다음 로그를 읽고 싶을 때 사용>

adb logcat -s AlexeysActivity

그러면 동일한 태그를 사용하지 않는 모든 항목이 필터링됩니다.

원천

이클립스용 ADT v15를 사용하여 응용 프로그램 이름(실제는 안드로이드 매니페스트.xml의 패키지 값)을 지정할 수 있습니다.

저는 앱으로 필터링할 수 있는 것을 좋아하지만, 새로운 로그캣은 자동 스크롤에 버그가 있습니다.이전 로그를 보기 위해 위로 조금 스크롤하면 몇 초 만에 자동으로 아래쪽으로 다시 스크롤됩니다.로그를 1/2 정도 위로 스크롤하는 것은 로그가 다시 아래로 점프하는 것을 방지하는 것처럼 보이지만, 그것은 종종 쓸모가 없습니다.

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

LogCat 응용 프로그램 메시지

변형으로 제이크 와튼의 타사 스크립트 PID Cat을 사용할 수 있습니다.이 스크립트에는 두 가지 주요 이점이 있습니다.

  • 특정 응용 프로그램 패키지의 프로세스에 대한 로그 항목 표시
  • 컬러 로그캣

설명서에서:

응용 프로그램 개발 중에는 응용 프로그램에서 보내는 로그 메시지만 표시하려는 경우가 많습니다.안타깝게도 전화기에 배포할 때마다 프로세스 ID가 변경되기 때문에 올바른 방법을 찾기가 어렵습니다.

이 스크립트는 응용 프로그램 패키지별로 필터링하여 문제를 해결합니다.

출력은 다음과 같습니다.

로그캣에 액세스하려면 먼저 ADB 명령줄 도구를 설치해야 합니다.ADB 명령줄 도구는 Android 스튜디오 플랫폼 도구의 일부이며 여기에서 다운로드할 수 있습니다.이후에는 adb 도구의 경로/환경 변수를 설정해야 합니다.이제 맥북을 사용하는 경우 이클립스 터미널/인텔리즈 터미널 또는 맥 터미널에서 로그캣에 액세스할 수 있습니다.

adb logcat전체 로그캣을 가져옵니다.

adb shell pidof 'com.example.debug'앱의 프로세스 ID를 가져옵니다.

adb logcat pid=<pid>앱에 고유한 로그캣을 가져옵니다.

adb logcat pid=<pid>|grep 'sometext'일부 텍스트를 기준으로 로그캣을 필터링합니다.

로그캣 필터링에 대한 자세한 내용은 이 문서를 참조하십시오.

Ionic을 사용하는 Windows 10에서는 모든 App 메시지에서 생성되는 "INFO:CONSOLE"과 'findstr'을 결합하여 사용할 수 있었습니다.명령행에서 제 명령은 다음과 같습니다.

adb logcat | findstr INFO:CONSOLE

셸 내부에 있을 때 정확한 패키지 이름의 로그를 가져오는 또 다른 방법:

logcat --pid $(ps -ef | grep -E "com.example.app\$" | awk '{print $2}') 

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

시도: Window -> Preferences -> Android -> LogCat."Show logcat view if..." 필드 값을 "VERBOSE"로 변경합니다.도움이 됐어요.

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

로그 이름을 지정합니다.저는 제 것을 "와와"라고 불렀습니다.

여기에 이미지 설명 입력

Android Studio에서 Android-> 필터 구성 편집으로 이동합니다.

여기에 이미지 설명 입력

그런 다음 로그에 지정한 이름을 입력합니다.저 같은 경우에는 "와와"라고 부릅니다.다음은 수행할 수 있는 필터 유형의 몇 가지 예입니다.시스템별로 필터링할 수 있습니다.out, System.err, 로그 또는 패키지 이름:

여기에 이미지 설명 입력 여기에 이미지 설명 입력 여기에 이미지 설명 입력

이것이 아마도 가장 간단한 해결책일 것입니다.

Tom Mulcahy의 솔루션 외에도 다음과 같이 더욱 단순화할 수 있습니다.

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

일반 별칭처럼 사용하기 쉽습니다.셸에 명령을 입력하면 됩니다.

logcat

별칭 설정을 사용하면 편리합니다.그리고 정규식은 메인 프로세스에만 관심이 있다고 가정할 때 다중 프로세스 앱에 강력하게 적용됩니다.

물론 각 프로세스에 대해 원하는 대로 더 많은 별칭을 설정할 수 있습니다.아니면 헤게이지 용액을 사용하세요.:)

또한 로깅 수준을 설정하려면 다음과 같이 하십시오.

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

아래 명령을 사용하여 응용 프로그램 패키지에 대한 자세한 로그를 가져올 수 있습니다.

adblogcat com.dll.myapp:V *:S

또한 앱을 롤아웃하고 릴리스된 앱에서 오류 로그를 가져오려면 아래 명령을 사용할 수 있습니다.

adblogcat Android 런타임:E *:S

나는 보통 로그 메시지에 그것을 구별하기 위해 무언가를 추가합니다.또는 유니티 앱의 경우 "Unity"를 일치 문자열로 사용할 수 있습니다.

Mac의 경우:

adb logcat | grep "MyUniqueString" 

Windows의 경우(파워 셸):

adb logcat | Select-String "MyUniqueString"

저는 다른 접근 방식을 가지고 있습니다. 로컬 장치의 셸에 액세스할 수 있습니다.

adb shell

그리고 그 뒤를 따릅니다.

logcat | grep com.package.name

이 인쇄물에는 모두 해당 패키지가 포함되어 있습니다.

또는 시도할 수 있습니다.flutter logs --verbose

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의 답변 에도 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%

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

반응형