Android 용 ADT와 함께 Eclipse와 함께 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 *: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로 전송되는지 확실하지 않습니다.
logcat <your package name>:<log level>
답을가 유효 필터로 패키지 이름을 사용할 수 있다고 제안한다. 실제로 말하는 내용을 이해하려면 답을 두 번 읽어야했기 때문에 첫 번째 줄을 ""logcat <tag>:<log level>
<tag>
android.util.Log
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
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`
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
grep
과 findstr
옵션을하지만, 그들은 단지 많은 메시지를 제외한 어떤 값으로 로그를 필터링하고 있습니다. 귀하의 답변은 실제 답변입니다. 다른 라이브러리의 로그 메시지를 제외하지 않고 앱에 대한 모든 로그를 표시하십시오. Android Studio의 현재 '선택된 항목 만 표시'필터와 같습니다. 감사!
필터 추가
이름을 지정하십시오
필터를 선택하십시오.
나를 위해 이것은 Mac에서 작동 Terminal
합니다. adb
다음 터미널에 아래 명령을 입력 한 폴더로 이동하십시오.
./adb logcat MyTAG:V AndroidRuntime:E *:S
여기에서 모든 로그를 필터링 MyTAG
하고AndroidRuntime
Log.d("MyTAG", "i am hero"); Log.d("AndroidRunTime", "i am zero");
2) 안드로이드에 DEBUG 로그인에 $ adb -s RKSCWSOV5SAIEUSC shell;
3) $ logcat MyTAG:V AndroidRuntime:E *:S
4) 지금은 자세한 MyTAG 및 AndroidRuntime의 오류가 표시됩니다
몇 년이 지났고 일이 바뀌 었습니다. 그리고 Eclipse는 더 이상 공식적으로 지원되지 않습니다. 따라서 여기에는 두 가지 최신 접근 방식이 있습니다.
에서 Android monitor
도구 상자, 당신은 로그 캣의 당을 필터링 할 수 있습니다 debuggable process
. 일반적으로 응용 프로그램을 개발할 때는 디버깅 가능한 프로세스입니다. 가끔씩 나는 이것에 문제가 있고 다음을 수행하십시오.
Tools
-> Android
-> Enable ADB Integration
.
이미 활성화되어 있으면 끄고 다시 켭니다.
모바일 장치를 분리했다가 다시 연결하십시오.
정규식과 디버그 수준을 통해 필터링하는 옵션도 있습니다
adb logcat
터미널 기반 솔루션을 사용하려는 경우 멋진 파이썬 래퍼입니다 . 그것에 대한 좋은 점은 여러 구성을 저장하고 간단히 재사용 할 수 있다는 것입니다. 필터링 기준 tags
은 매우 안정적입니다. 필터링하여 package
하나 이상의 앱 로그 만 볼 수 있지만 앱을 시작 logcat-color
하기 직전에 시작합니다.
이전 답변에 댓글을 달 수 없으므로 새 답변을 게시 할 것입니다. 이것은 PID Mulcahy 의 답변에 대한 주석 이며 adb shell ps
PID 열은 가변적 이므로 대부분의 장치에서 작동하도록 명령을 변경하는 방법을 보여줍니다 .
참고 : 아래 명령은 많은 장치를 연결 한 경우에 작동합니다. 그래서 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를 가져 오기 때문에 응용 프로그램을 다시 실행할 때마다 두 번째 명령을 다시 실행해야합니다.
이것을 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
log.d("TAG", "multine\nlog")
예를 들어이) : adb -d logcat -v long | sed -Ene '/^\[.*'" (${APPID}):"'.*\]/ { N; s/\n/ /; p; :a;' -e 'n; p; s/^.+$/foo/; t a;' -e ' }' | grep -v '^$'
- 나는 밖으로 왼쪽 tr
, 나는 그것이 Windows 시스템에 필요한 있으리라 믿고있어, 나는 랩 APPID
의해 복수의 PID (로 구분 괄호는 허용 |
) .
패키지 이름으로 logcat을 필터링하기위한 쉘 스크립트를 작성했습니다.
ps | grep com.example.package | cut -c10-15
/ proc / $ pid / cmdline을 사용하여 실제 pid를 찾은 다음 logcat에서 grep을 수행합니다.
우분투 : adb logcat -b all -v color --pid =`adb shell pidof -s com.packagename` 앱의 색상과 연속 로그
adb shell pidof ...
비트는 내가 그렇게 나를 위해 일을하지 않았다 adb shell
장치에 에드 도망 top
명령에 교체 한 후이 내 응용 프로그램의 PID를 복사
pgrep
pidof 대신 시도
Eclipse 용 ADT v15를 사용하면 애플리케이션 이름 (실제로 androidmanifest.xml의 패키지 값)을 지정할 수 있습니다.
앱별로 필터링 할 수는 있지만 새로운 logcat에는 자동 스크롤에 버그가 있습니다. 이전 로그를보기 위해 약간 위로 스크롤하면 몇 초 안에 자동으로 맨 아래로 다시 스크롤됩니다. 로그를 1/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`"
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"
사용 -s
!
자신의 태그를 사용해야합니다. http://developer.android.com/reference/android/util/Log.html
처럼.
Log.d("AlexeysActivity","what you want to log");
그런 다음 로그 사용을 읽으려면>
adb logcat -s AlexeysActivity
동일한 태그를 사용하지 않는 모든 것을 걸러냅니다.
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%
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>]