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


341

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


1
모든 답변은 디버깅중인 앱의 메시지 필터링을 제안합니다. 이러한 필터를 설정 한 경우에도 다른 앱의 Logcat 스팸은 크기에 상관없이 로그 버퍼를 채 웁니다. 이 메시지를 전혀 수집하지 않거나 주기적으로 삭제하도록 Eclipse에 지시하는 방법이 있습니까?
가격

답변:


267

패키지 이름은 고유하므로 태그와 함께 함수를 패키지 이름으로 사용하고 패키지 이름으로 필터링 할 수 있습니다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로 전송되는지 확실하지 않습니다.


10
나는 질문이 일식에 관한 것이라는 것을 알고 있지만 명령 줄을 좋아하고 항상 logcat에도 사용합니다. 또한 jsharkey.org/blog/2009/04/22/… 와 같은 출력물 을 채색하는 도구도 사용하십시오.
Francisco Jordano

1
에뮬레이터 테스트 : adb -e logcat com.example.example : I * : S, adb -d logcat System.out : I * : S가 실행될 때 문제가 발생했습니다.
CoDe

1
@Shubh 그것이 붙어 있다는 것은 무엇을 의미합니까? 나는 거의 1 년 전에 이것을 게시 했으므로 Logcat의 무언가가 그 이후로 변경되었을 수 있습니다.
shanet 2018 년

58
이 메소드는 앱이 아닌 태그별로 필터링합니다. 톰의 방법은 응용 프로그램에 의해 필터
조나스 알베스에게

17
사용하여 logcat <your package name>:<log level>답을가 유효 필터로 패키지 이름을 사용할 수 있다고 제안한다. 실제로 말하는 내용을 이해하려면 답을 두 번 읽어야했기 때문에 첫 번째 줄을 ""logcat <tag>:<log level><tag>android.util.Log
Flow

368

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

2
@ BTRNaidu : Cygwin을 설치하거나 git-bash (Windows 용 bash)를 사용할 수 있습니다
Phillip

1
pid=$(adb shell ps | grep "package-name" | cut -c10-15) && adb logcat | grep $pid
VishalKale

1
somtimes gc는 메모리를 확보 할 때 pid 번호의 프로세스로 동일한 번호를 인쇄합니다. 여기 다른 버전이 있습니다adb logcat | grep `adb shell ps | grep org.videolan.vlc | awk '{print $2")"}'`
alijandro

14
Windows에서 할 수있는 작업 :adb logcat | findstr com.example.package
jj_

8
답변이 약간만 변경되었습니다. 내가 제안 :adb logcat | grep `adb shell ps | grep com.example.package | tr -s [:space:] ' ' | cut -d' ' -f2`
hiepnd

59

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


2
나는 모든 노력 grepfindstr옵션을하지만, 그들은 단지 많은 메시지를 제외한 어떤 값으로 로그를 필터링하고 있습니다. 귀하의 답변은 실제 답변입니다. 다른 라이브러리의 로그 메시지를 제외하지 않고 앱에 대한 모든 로그를 표시하십시오. Android Studio의 현재 '선택된 항목 만 표시'필터와 같습니다. 감사!
equiman

이 2 개의 명령은 "com.example.app"프로세스가 실행되는 동안 작동합니다. 그러나 프로세스가 실행되고 있지 않으면 오류 메시지가 나타납니다. 놀라움을 피하기 위해 단지 참고.
jonathanzh

53

필터 추가

필터 추가

이름을 지정하십시오

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

필터를 선택하십시오.

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


3
개발 도구를 설계 할 때는 사용자가 정확할 것으로 예상되므로 정확해야합니다. 애플리케이션 이름이 아닌 패키지 이름입니다. > :(
Henrik Erlandsson '10

19

나를 위해 이것은 Mac에서 작동 Terminal
합니다. adb다음 터미널에 아래 명령을 입력 한 폴더로 이동하십시오.

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

여기에서 모든 로그를 필터링 MyTAG하고AndroidRuntime


2
1) 자바 코드 : 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의 오류가 표시됩니다

1
이것은 MacOS에서 나를 위해 일한 유일한 대답입니다. 잘 했어.
옴하

1
@ om-ha 감사합니다. Studio를 오랫동안 사용했는데 여전히 문제가 있음을 몰랐습니다
Kumar Rathore Inder

1
사실 저는 Android Studio를 사용하지 않습니다. Flutter, Android SDK 및 Gradle을 사용하고 있습니다. 편집자 인 VS Code. 이 내 안드로이드 전화에 무슨 일이 일어나고 있는지 좋은 방법입니다 그래서
OM-HA

13

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


다른 앱이 아닌 앱에 대한 로그를 얻기 위해 수행해야 할 모든 작업을 살펴보십시오. 또한 다른 사람들이 다른 사람들의 로그를 볼 수 있다는 것은 정말 우스운 일입니다. Google이 할 수있는 일이 없다고 말하고 있습니까? 다른 사람들이 내 로그를 볼 수 없도록하고 로그 캣을 깨끗하게 유지 하시겠습니까?
TatiOverflow 3:15에서

10

이것은 git bash에서 나를 위해 일하고있다 :

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

9

이것을 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 (로 구분 괄호는 허용 |) .
로건 픽업

9

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

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

    adb shell

  2. 연결되면 logcat을 사용하십시오.

    logcat | grep com.yourapp.packagename


7

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

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


1
android studio 버전 0.4.5에서와 같이 u는 실행중인 앱에서만 메시지를 가져옵니다. 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
dmSherazi


7

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


adb shell pidof ...비트는 내가 그렇게 나를 위해 일을하지 않았다 adb shell장치에 에드 도망 top명령에 교체 한 후이 내 응용 프로그램의 PID를 복사
edzillion

pgreppidof 대신 시도
Lennoard Silva

이것은 OSX에서 작동합니다. -v 색상에 대한 추가 포인트
화성

6

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

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

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


6

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

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


4

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

  • 특정 응용 프로그램 패키지의 프로세스에 대한 로그 항목을 보여줍니다.
  • 컬러 로그 캣

설명서에서 :

응용 프로그램 개발 중에는 종종 앱에서 오는 로그 메시지 만 표시하려고합니다. 안타깝게도 전화에 배포 할 때마다 프로세스 ID가 변경되므로 올바른 것을 파악하기가 어려워집니다.

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

출력은 다음과 같습니다 여기에 이미지 설명을 입력하십시오


2

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


2

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


2

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


2

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

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

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

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

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

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


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`"

2

Windows 10에서 Ionic을 사용하여 나에게 큰 도움이 된 것은 'findstr'과 모든 App 메시지에서 생성 된 "INFO : CONSOLE"을 결합한 것입니다. 따라서 명령 줄의 명령은 다음과 같습니다.

adb logcat | findstr INFO:CONSOLE

1

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"

1

사용 -s!

자신의 태그를 사용해야합니다. http://developer.android.com/reference/android/util/Log.html

처럼.

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

그런 다음 로그 사용을 읽으려면>

adb logcat -s AlexeysActivity

동일한 태그를 사용하지 않는 모든 것을 걸러냅니다.

출처


1
코드를 작성한다고 가정하지 마십시오. 라이브러리의 메시지에 관심이있을 수 있으며 로그 문자열을 변경할 수 없습니다.
James Moore

1

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%

1

이것은 분명히에서 로그 캣의 사용을 목표로 질문 밖에서 당신이 로그 캣 출력 표시하려는 그러나 경우, 개발자 장치 에 대한 장치를 (프로그램), 당신은 단지이 필요합니다 :

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

*:D끝에 디버그 로그 수준 아래의 모든 메시지를 필터링하지만 당신은 그 제한을 둘 수 있습니다.

예를 들어 출력을 TextView로 보내려면 여기를 참조 하십시오 .


0

저장된 필터 막대에 새 필터를 추가하지 않고 필터링 할 수 있도록 tag : name of the tag 또는 app : name oftheapp를 입력 할 수 있습니다.


0

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


0

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


-1

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

adb logcat | grep `adb shell ps | grep your.package | awk '{print $2}'`
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.