Android 스튜디오의 Logcat 창에는 기기의 로그가 실시간으로 표시되어 앱을 디버그하는 데 도움이 됩니다. 예를 들어 Log
클래스를 사용하여 앱에 추가한 메시지, Android에서 실행되는 서비스의 메시지, 시스템 메시지(예: 가비지 컬렉션 발생) 등의 로그가 표시됩니다. 앱에서 예외가 발생하면 Logcat은 메시지를 표시한 다음 코드 줄 링크를 포함한 연결된 스택 트레이스를 표시합니다.
Logcat 창 시작하기
앱의 로그 메시지를 보려면 다음 단계를 따르세요.
- Android 스튜디오를 사용하여 실제 기기나 에뮬레이터에서 앱을 빌드하고 실행합니다.
- 메뉴 바에서 View > Tool Windows > Logcat을 선택합니다.
기본적으로 Logcat은 끝까지 스크롤됩니다. Logcat 뷰를 클릭하거나 마우스 휠을 사용해 위로 스크롤하면 이 기능이 사용 중지됩니다. 다시 사용 설정하려면 툴바에서 Scroll to the End 를 클릭합니다. 툴바를 사용하여 Logcat을 삭제하거나 일시중지하거나 다시 시작할 수도 있습니다.
그림 1. Logcat에서 태그, 메시지 등 유용한 정보를 더 쉽게 검사하고 경고, 오류와 같은 다양한 유형의 로그를 더 쉽게 식별할 수 있도록 로그 형식을 지정합니다.
로그를 이해하는 방법
각 로그에는 날짜, 타임스탬프, 프로세스 및 스레드 ID, 태그, 패키지 이름, 우선순위 및 연관된 메시지가 있습니다. 태그마다 고유한 색상이 있어서 로그 유형을 식별하는 데 도움이 됩니다. 각 로그 항목의 우선순위는 FATAL
, ERROR
, WARNING
, INFO
, DEBUG
또는 VERBOSE
입니다.
예를 들어, 다음 로그 메시지의 우선순위는 DEBUG
이고 태그는 ProfileInstaller
입니다.
2022-12-29 04:00:18.823 30249-30321 ProfileInstaller com.google.samples.apps.sunflower D Installing profile for com.google.samples.apps.sunflower
로그 뷰 구성
표준 로그 뷰에는 각 로그의 날짜, 시간, 프로세스 및 스레드 ID, 태그, 패키지 이름, 우선순위, 연관된 메시지가 표시됩니다. 기본적으로 메시지 줄은 로그 뷰에 래핑되지 않지만, Logcat 툴바의 Soft-Wrap 옵션을 사용할 수 있습니다.
기본 표시 정보가 더 적은 컴팩트 뷰로 전환할 수 있습니다. Logcat 툴바에서 Configure Logcat Formatting Options 를 클릭하면 됩니다.
표시할 정보의 양을 추가로 구성하려면 Modify Views를 선택한 후 타임스탬프, 태그, 프로세스 ID 또는 패키지 이름 표시 여부를 선택합니다.
색 구성표 변경하기
색 구성표를 변경하려면 Android 스튜디오 > Settings > Editor > Color Scheme으로 이동합니다. 로그 뷰의 색 구성표를 변경하려면 Android Logcat을 선택합니다. 필터의 색 구성표를 변경하려면 Logcat Filter를 선택합니다.
추가 구성 옵션
추가 구성 옵션을 보려면 Android 스튜디오 > Settings > Tools > Logcat으로 이동합니다. 여기에서 Logcat 주기 버퍼 크기, 새 Logcat 창의 기본 필터, 기록의 필터를 자동 완성에 추가할지 여부를 선택할 수 있습니다.
여러 창에서 Logcat 사용
탭을 사용하여 여러 기기 또는 검색어 간에 쉽게 전환할 수 있습니다. New Tab 을 클릭하여 여러 Logcat 탭을 만들 수 있습니다. 탭을 마우스 오른쪽 버튼으로 클릭하면 이름을 바꾸고 다시 정렬할 수 있습니다.
또한 탭 내의 뷰를 분할하여 두 로그 세트 간에 더 쉽게 비교할 수 있습니다. 분할을 만들려면 로그 뷰에서 마우스 오른쪽 버튼을 클릭하거나 툴바에서 Split Panels 옵션을 클릭한 후 Split Right 또는 Split Down을 선택합니다. 분할을 닫으려면 마우스 오른쪽 버튼을 클릭하고 Close를 선택합니다. 각 분할을 통해 자체 기기 연결, 뷰 옵션, 쿼리를 설정할 수 있습니다.
그림 2. Android 스튜디오에서 Logcat 창 분할
Logcat 툴바에서 로그의 끝으로 스크롤하거나 특정 줄을 클릭하여 해당 줄이 계속 표시되도록 할 수 있습니다.
키-값 검색을 사용하여 로그 쿼리
Android 스튜디오에서는 기본 쿼리 필드에서 바로 키-값 검색을 생성할 수 있습니다. 이 쿼리 시스템은 쿼리하려는 항목의 정확성을 제공하고 키-값을 기반으로 로그를 제외합니다. 정규 표현식을 사용하는 옵션이 있지만 이 옵션을 쿼리에 사용할 필요가 없습니다. 추천을 보려면 쿼리 필드에서 Ctrl
+ Space
를 누르세요.
그림 3. 쿼리 필드에서 Ctrl
+ Space
를 눌러 추천 쿼리 목록 표시
다음은 쿼리에 사용할 수 있는 키의 예입니다.
tag
: 로그 항목의tag
필드와 일치합니다.package
: 로깅 앱의 패키지 이름과 일치합니다.process
: 로깅 앱의 프로세스 이름과 일치합니다.message
: 로그 항목의 메시지 부분과 일치합니다.level
: 지정된 수준 또는 그보다 엄격한 로그 수준(예:DEBUG
)과 일치합니다.age
: 항목 타임스탬프가 최근인 경우 일치합니다. 값은 숫자 뒤에 시간 단위를 지정하는 문자(예: 초는s
, 분은m
, 시간은h
, 일은d
)로 지정됩니다. 예를 들어age: 5m
은 지난 5분 동안 로그된 메시지만 필터링합니다.
부정 및 정규 표현식
부정 및 정규 표현식 일치를 지원하는 필드는 tag
, package
, message
, line
입니다.
부정은 필드 이름 앞에 -
를 추가하여 표현합니다. 예를 들어 -tag:MyTag
는 tag
에 MyTag
문자열이 포함되지 않은 로그 항목과 일치합니다.
정규 표현식 일치는 필드 이름에 ~
를 추가하여 표현합니다.
예를 들면 다음과 같습니다. tag~:My.*Tag
부정 및 정규 표현식 수정자를 조합할 수 있습니다. 예를 들면 다음과 같습니다.
-tag~:My.*Tag
논리 연산자 및 괄호
쿼리 언어는 &
, |
, 괄호로 표현되는 AND
연산자 및 OR
연산자를 지원합니다. 예를 들면 다음과 같습니다.
(tag:foo | level:ERROR) & package:mine
일반적인 연산자 우선순위가 적용되므로, 다음의 경우
tag:foo | level:ERROR & package:mine
다음과 같이 평가됩니다.
tag:foo | (level:ERROR & package:mine)
암시적 논리 연산자
논리 연산자가 적용되지 않으면 쿼리 언어는 OR
연산자와 동일한 키를 가진 다수의 비무효 key-value
필터 용어 및 AND
가 있는 다른 모든 용어를 자동으로 평가합니다.
예를 들면 아래 예는
tag:foo tag:bar package:myapp
다음과 같이 평가됩니다.
(tag:foo | tag:bar) & package:myapp
하지만 아래 예는
tag:foo -tag:bar package:myapp
다음과 같이 평가됩니다.
tag:foo & -tag:bar & package:myapp
여러 개의 검색어를 논리 연산자 없이 공백으로 구분하면 우선순위가 낮은 AND로 처리됩니다. 예를 들어 foo bar tag:bar1 | tag:bar2
는 'foo bar' & (tag: bar1 | tag: bar2)
와 동일하게 처리됩니다.
특수 쿼리
package:mine
패키지 키는 특수 값 mine
을 지원합니다. 이 특수 값은 열려 있는 프로젝트에 포함된 패키지 이름과 일치합니다.
level
level
쿼리는 Logcat 메시지의 로그 수준과 일치합니다. 여기서 로그 항목 수준은 쿼리 수준보다 크거나 같습니다.
예를 들어 level:INFO
는 로그 수준이 INFO
, WARN
, ERROR
또는 ASSERT
인 로그 항목과 일치합니다. 수준은 대소문자를 구분하지 않습니다. 유효한 수준은 VERBOSE
, DEBUG
, INFO
, WARN
, ERROR
, ASSERT
입니다.
age
age
쿼리는 타임스탬프를 기준으로 항목과 일치하며 형식이 age:<number><unit>
입니다. 이는 다음과 같습니다.
<number>
는 정수입니다.<unit>
은s
,m
,h
,d
(초, 분, 시간, 일) 중 하나입니다.
다음 목록에서 age
쿼리는 값에 설명된 범위의 타임스탬프가 있는 로그 메시지와 일치합니다. 예를 들어 age:5m
쿼리는 타임스탬프가 최대 5분 전인 항목과 일치합니다.
age:30s
age:5m
age:3h
age:1d
타임스탬프는 연결된 기기가 아닌 호스트의 타임스탬프와 비교됩니다. 기기의 시간이 올바르게 설정되지 않은 경우 이 쿼리가 예상대로 작동하지 않을 수도 있습니다.
is
키
다음과 같이 is
키를 사용할 수 있습니다.
is:crash
는 애플리케이션 비정상 종료를 나타내는 로그 항목(네이티브 또는 자바)과 일치합니다.is:stacktrace
는 로그 수준과 관계없이 자바 스택 트레이스처럼 보이는 항목을 나타내는 로그 항목과 일치합니다.
name
키
name
키를 사용하면 저장된 필터에 고유한 이름을 제공하여 필터 기록 드롭다운에서 쉽게 식별되도록 할 수 있습니다. name
을 두 번 이상 지정할 때 오류가 발생하지는 않지만 IDE는 쿼리에서 name
에 마지막으로 지정된 값만 사용합니다.
쿼리 기록 보기
쿼리 필드 옆에 있는 Show history 를 클릭하여 쿼리 기록을 볼 수 있습니다. 모든 스튜디오 프로젝트에서 목록 상단에 유지되도록 쿼리를 즐겨찾기에 추가하려면 쿼리 옆에 있는 별표를 클릭합니다. name:
키를 사용하면 자주 사용하는 쿼리를 더 알아보기 쉽게 만들 수도 있습니다. 자세한 내용은 특수 쿼리를 참고하세요.
그림 4. 옆의 별표를 클릭하여 쿼리를 즐겨찾기에 추가
앱 비정상 종료/다시 시작 시 로그 추적
Logcat이 앱 프로세스가 중지되고 다시 시작된 것을 확인하면 출력에 PROCESS ENDED
및 PROCESS STARTED
와 같은 메시지가 표시됩니다.
Logcat을 다시 시작하면 탭 분할, 필터, 뷰 옵션과 같은 세션 구성이 유지되므로 쉽게 세션을 계속할 수 있습니다.
그림 5. 앱 프로세스가 다시 시작되면 Logcat은 프로세스가 종료되었다가 시작되었다는 메시지를 출력합니다.