Logcat을 이용하여 로그 보기

Android 스튜디오의 Logcat 창에는 기기의 로그가 실시간으로 표시되어 앱을 디버그하는 데 도움이 됩니다. 예를 들어 Log 클래스를 사용하여 앱에 추가한 메시지, Android에서 실행되는 서비스의 메시지, 시스템 메시지(예: 가비지 컬렉션 발생) 등의 로그가 표시됩니다. 앱에서 예외가 발생하면 Logcat은 메시지를 표시한 다음 코드 줄 링크를 포함한 연결된 스택 트레이스를 표시합니다.

Logcat 창 시작하기

앱의 로그 메시지를 보려면 다음 단계를 따르세요.

  1. Android 스튜디오를 사용하여 실제 기기나 에뮬레이터에서 앱을 빌드하고 실행합니다.
  2. 메뉴 바에서 View > Tool Windows > Logcat을 선택합니다.

기본적으로 Logcat은 끝까지 스크롤됩니다. Logcat 뷰를 클릭하거나 마우스 휠을 사용해 위로 스크롤하면 이 기능이 사용 중지됩니다. 다시 사용 설정하려면 툴바에서 Scroll to the End Scroll to the End 아이콘를 클릭합니다. 툴바를 사용하여 Logcat을 삭제하거나 일시중지하거나 다시 시작할 수도 있습니다.

Logcat 창 UI

그림 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 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 New Tab 아이콘을 클릭하여 여러 Logcat 탭을 만들 수 있습니다. 탭을 마우스 오른쪽 버튼으로 클릭하면 이름을 바꾸고 다시 정렬할 수 있습니다.

또한 탭 내의 뷰를 분할하여 두 로그 세트 간에 더 쉽게 비교할 수 있습니다. 분할을 만들려면 로그 뷰에서 마우스 오른쪽 버튼을 클릭하거나 툴바에서 Split Panels 옵션을 클릭한 후 Split Right 또는 Split Down을 선택합니다. 분할을 닫으려면 마우스 오른쪽 버튼을 클릭하고 Close를 선택합니다. 각 분할을 통해 자체 기기 연결, 뷰 옵션, 쿼리를 설정할 수 있습니다.

여러 Logcat 창그림 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:MyTagtagMyTag 문자열이 포함되지 않은 로그 항목과 일치합니다.

정규 표현식 일치는 필드 이름에 ~를 추가하여 표현합니다. 예를 들면 다음과 같습니다. 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: 키를 사용하면 자주 사용하는 쿼리를 더 알아보기 쉽게 만들 수도 있습니다. 자세한 내용은 특수 쿼리를 참고하세요.

쿼리를 즐겨찾기에 추가하는 UI

그림 4. 옆의 별표를 클릭하여 쿼리를 즐겨찾기에 추가

앱 비정상 종료/다시 시작 시 로그 추적

Logcat이 앱 프로세스가 중지되고 다시 시작된 것을 확인하면 출력에 PROCESS ENDEDPROCESS STARTED와 같은 메시지가 표시됩니다. Logcat을 다시 시작하면 탭 분할, 필터, 뷰 옵션과 같은 세션 구성이 유지되므로 쉽게 세션을 계속할 수 있습니다.

앱 비정상 종료 시 Logcat 창

그림 5. 앱 프로세스가 다시 시작되면 Logcat은 프로세스가 종료되었다가 시작되었다는 메시지를 출력합니다.