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 디버깅을 사용하면 다음과 같이 작동합니다.
해결책은 셸을 통해 직접 장치의 로그캣을 사용하는 것입니다.
장치를 연결하고 다음을 사용합니다.
adb shell
셸이 설정된 후 logcat 사용:
logcat | grep com.yourapp.packagename
나에게 이것은 맥에서 작동합니다.Terminal
있는 했습니다.adb
에 아래 명령을 합니다.
./adb logcat MyTAG:V AndroidRuntime:E *:S
에서는 여서모로필다니합터의 .MyTAG
그리고.AndroidRuntime
5월 17일 업데이트
몇 년이 지났고, 상황이 변했습니다.그리고 이클립스는 더 이상 공식적으로 지원되지 않습니다.다음은 두 가지 더 최신 접근 방식입니다.
안드로이드 스튜디오
에서Android monitor
을 필터링할 수 .debuggable process
일반적으로 응용프로그램을 개발할 때 디버깅할 수 있는 프로세스입니다.가끔 이 문제로 인해 문제가 발생하고 다음을 수행합니다.
Tools
->Android
->Enable ADB Integration
.
활성화되어 .모바일 장치의 플러그를 뽑고 다시 꽂습니다.
정규식 및 디버그 수준을 통해 필터링하는 옵션도 있습니다.
로그캣 컬러
이것은 위에 있는 멋진 파이썬 포장지입니다.adb logcat
터미널 기반 솔루션을 사용하려는 경우좋은 점은 여러 구성을 저장하고 재사용할 수 있다는 것입니다.에 의한 tags
꽤 믿을 만합니다.다음을 기준으로 필터링할 수도 있습니다.package
logcat-color
앱을 실행하기 직전에.
이전 답변:
이전 답변에 대해서는 코멘트를 할 수 없는 것 같으니, 새로운 답변을 올리겠습니다.이는 Tom Mulcahy의 답변에 대한 코멘트로, 대부분의 장치에서 작동하기 위해 명령이 어떻게 변경되어야 하는지를 보여줍니다.adb shell ps
PID 열은 변수입니다.
참고: 아래 명령은 많은 장치를 연결한 경우에 사용할 수 있습니다.그렇게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
'programing' 카테고리의 다른 글
여러 파일을 통해 더 큰 프로젝트에 Sinatra 사용 (0) | 2023.05.31 |
---|---|
Ruby에서 임의 문자열을 생성하는 방법 (0) | 2023.05.31 |
Bash에서 따옴표로 묶은 문자열 내에서 환경 변수를 사용하는 방법 (0) | 2023.05.26 |
기본적으로 빠른 전달을 해제할 수 있습니까? (0) | 2023.05.26 |
mongodb ObjectId 생성 시간에 사용 (0) | 2023.05.26 |