Console.app: 개요, 기능 및 macOS에서 로그를 읽는 방법

저자: IT Sectr 게시일: 2026-05-29 읽는 시간: 8 분

Console.app은 시스템 및 사용자 로그를 보고, 필터링하고, 분석하기 위한 macOS 내장 애플리케이션입니다. Apple의 통합 로깅 시스템(os_log)의 메시지를 실시간으로 표시하여 개발자가 Xcode에 연결하지 않고도 크래시, 오류 및 디버그 메시지를 볼 수 있습니다. Apple Support에 따르면 Console.app은 하위 시스템, 카테고리, 중요도 수준 및 프로세스별 필터링과 .logarchive로의 로그 내보내기를 지원합니다. 이는 Mac에서 문제를 진단하는 데 필수적인 도구입니다. 필터와 저장된 검색을 사용하면 수천 개의 시스템 메시지 중에서 애플리케이션 오류를 빠르게 찾을 수 있습니다.

핵심 요점

  • Console.app — Apple의 통합 로깅 시스템과 함께 작동하는 macOS 내장 로그 뷰어
  • 필터링 — 하위 시스템, 카테고리, 수준(Error, Fault, Debug) 및 메시지 텍스트별 검색(정규식 지원)
  • 모드 — Live(실시간 스트림) 및 Historical(보관된 로그), 도구 모음에서 전환
  • 내보내기 — .logarchive, .txt, .json 형식으로 로그를 저장하여 개발자와 공유하거나 버그 리포트에 첨부
  • 저장된 검색 — 일반적인 시나리오를 위한 명명된 필터: 모든 앱 오류, 네트워크 로그, CrashReporter

Console.app이란

Console.app은 Apple의 통합 로깅 시스템의 그래픽 인터페이스입니다. 이전 Console 애플리케이션(macOS의 일부)을 대체했으며 os_log, os_trace 및 syslog API를 통해 기록된 모든 시스템 및 애플리케이션 로그에 대한 액세스를 제공합니다. Console.app은 모든 Mac의 /Applications/Utilities/에 있습니다.

Xcode가 IDE에서 실행한 애플리케이션의 로그만 표시하는 반면, Console.app은 시스템의 모든 프로세스 로그를 동시에 표시합니다. 이를 통해 Xcode 외부나 백그라운드에서 애플리케이션을 실행할 때만 발생하는 문제를 진단할 수 있습니다. Console.app은 커널, launchd, WindowServer 등의 시스템 로그도 표시하므로 저수준 문제를 디버깅하는 데 유용합니다.

Console.app은 추가 도구 설치나 인터넷 연결이 필요하지 않습니다. 모든 데이터는 .tracev3 데이터베이스에 로컬로 저장되며 애플리케이션은 완전히 오프라인에서 작동합니다. 다른 Mac이나 iOS 기기에서 로그를 보려면 log collect 명령을 사용한 후 .logarchive를 Console.app에서 엽니다.

Console.app 인터페이스

Console.app 인터페이스는 필터가 있는 사이드바, 메시지 테이블, 선택한 메시지의 세부 정보 패널의 세 가지 주요 영역으로 구성됩니다. 사이드바에는 Devices(사용 가능한 로그 소스), Reports(시스템 크래시 리포트), Saved Searches(저장된 검색 쿼리) 섹션이 있습니다.

메시지 테이블에는 Time(타임스탬프), Category(카테고리), Level(중요도 수준 — 색상 코드), Process(프로세스 이름), Message(메시지 텍스트) 열이 있는 로그 목록이 표시됩니다. 메시지를 클릭하면 하위 시스템, 활동 식별자, 스레드 ID 및 전체 형식 텍스트가 표시되는 세부 정보 패널이 열립니다.

Console.app은 메시지를 색상으로 강조 표시합니다: Fault는 빨간색, Error는 노란색, Debug는 파란색, Info는 회색입니다. Default 메시지는 강조 표시되지 않습니다. 이를 통해 로그 스트림을 시각적으로 스캔하고 중요한 이벤트를 즉시 파악할 수 있습니다.

swift
// Console.app에 표시될 로그
import OSLog

let logger = Logger(
    subsystem: "com.example.myapp",
    category: "network"
)

logger.error("Connection failed: timeout")
logger.debug("Retry attempt 3 of 5")

// 이 메시지는 필터 'myapp'을 적용한 Console.app에서 볼 수 있습니다

Console.app의 필터 및 검색

필터링은 Console.app의 주요 기능으로, 초당 수천 개의 메시지 스트림을 읽을 수 있는 목록으로 변환합니다. 상단의 검색 필드는 AND 조건을 지원합니다: 공백으로 구분된 여러 단어는 모든 단어를 포함하는 메시지만 표시합니다. 예를 들어, myapp error는 Error 수준의 myapp 애플리케이션의 모든 로그를 표시합니다.

사이드바의 하위 시스템 필터에서는 하나 이상의 하위 시스템을 선택할 수 있습니다. 이것은 시스템 메시지에서 특정 애플리케이션의 로그를 분리하는 가장 빠른 방법입니다. 카테고리 필터는 하위 시스템을 선택한 후 사용할 수 있으며 선택한 애플리케이션에서 사용하는 모든 카테고리를 표시합니다. 수준 필터는 중요도 수준에 따라 메시지를 제한합니다: 오류만 또는 디버그 메시지만 표시할 수 있습니다.

필터 유형예시결과
텍스트crash paymentcrash와 payment를 모두 포함하는 메시지
Subsystemcom.example.myapp지정한 애플리케이션의 로그만
LevelError + Fault오류 및 심각한 장애만
Categorynetworknetwork 카테고리의 메시지
시간지난 1시간선택한 간격의 메시지만

검색에서 정규 표현식

Console.app의 검색 필드는 REGEX:pattern 구문을 통해 정규 표현식을 지원합니다. 예시: REGEX:error.*tim(e|out)은 “error”를 포함하고 “tim”으로 시작하며 “e” 또는 “out”로 끝나는 단어가 포함된 모든 메시지를 찾습니다. 정규 표현식은 검색 필드에서만 작동하며 하위 시스템이나 카테고리 필터에서는 작동하지 않습니다.

Live 및 Historical 모드

Live는 Console.app이 커널 링 버퍼에 새 메시지가 나타나는 즉시 표시하는 실시간 모드입니다. 이 모드는 기본적으로 활성화되어 있으며 실행 중인 애플리케이션을 디버깅하는 데 적합합니다: 애플리케이션을 실행하면 1~5초 지연으로 로그가 표시됩니다. Live 버튼(또는 ⌘L)으로 스트림을 켜고 끕니다.

Historical은 아카이브 보기 모드입니다. Console.app은 지난 7~14일(시스템에서 구성 가능)의 모든 메시지를 .tracev3 데이터베이스에 저장합니다. Historical 모드는 이 아카이브를 열고 현재 스트림뿐만 아니라 모든 필터를 사용하여 검색할 수 있습니다. 이는 밤중이나 애플리케이션이 Mac에 연결되지 않고 실행 중일 때 발생한 문제를 분석하는 데 필수적입니다.

모드 전환은 도구 모음의 Live 버튼을 통해 이루어집니다. Live가 꺼져 있으면 Console.app이 기록 데이터를 표시합니다. 이 모드에서는 캘린더나 ← → 버튼을 사용하여 타임라인을 탐색할 수 있습니다. Historical 데이터는 디스크에 저장된 로그에만 사용 가능하며 링 버퍼에서 덮어쓰여진 메시지는 아카이브에 포함되지 않습니다.

로그 내보내기 및 공유

Console.app은 필터링된 로그를 여러 형식으로 내보낼 수 있습니다. File → Export → Save에서 형식을 선택할 수 있습니다: .logarchive(Apple 기본 형식, 모든 메타데이터 포함), .txt(열이 있는 일반 텍스트), .json(필드가 있는 구조화된 데이터). 버그 리포트에 첨부하려면 .logarchive를 사용하세요. 모든 Mac의 Console.app에서 열 수 있습니다.

iOS 기기에서 내보내기: Xcode(Devices → Open Console)를 통해 또는 터미널에서 log collect --device --output ./archive.logarchive 명령을 사용하여 수행합니다. 결과 .logarchive를 Mac의 Console.app에서 열면 원격 기기의 로그가 표시되지만 필터와 검색은 로컬 로그와 동일하게 작동합니다.

swift
// 터미널을 통한 iOS 기기 로그 내보내기
// log collect --device --output ./ios_crash.logarchive
// log show --subsystem com.example.app --last 1h --output json

// 예시: 지난 1시간 로그 내보내기
// log show --predicate 'subsystem == "com.example.myapp"' \
//   --info --debug --last 1h --output json > logs.json

// Swift에서 내보낸 로그 파싱
let jsonData = try Data(contentsOf: URL(fileURLWithPath: "logs.json"))
let decoded = try JSONDecoder()
    .decode([LogEntry].self, from: jsonData)

로그 공유

.logarchive는 동료에게 보내거나 JIRA 티켓에 첨부하기에 최적의 형식입니다. 파일에는 메시지뿐만 아니라 하위 시스템, 카테고리, 타임스탬프, 스레드 ID 및 모든 메타데이터가 포함됩니다. .tracev3 압축 덕분에 아카이브 크기는 원시 로그보다 훨씬 작습니다. 보내기 전에 로그에 개인 데이터가 없는지 확인하세요: 애플리케이션의 하위 시스템으로 필터를 사용하여 다른 프로세스의 기밀 정보를 포함할 수 있는 시스템 로그를 제외합니다.

Console.app을 활용한 실용적인 디버깅 예제

Xcode 없이 크래시 진단: 애플리케이션이 Xcode 외부에서 시작될 때 크래시되면 Console.app이 프로세스의 Fault 메시지를 표시합니다. 사이드바에서 Reports → Crash Reports를 찾으세요 — 서명 및 스택이 포함된 전체 크래시 리포트가 표시됩니다. 애플리케이션의 하위 시스템 필터를 사용하고 수준을 Error+Fault로 설정하여 크래시 전의 모든 중요 이벤트를 확인합니다.

Console.app을 통한 성능 분석

Console.app을 사용하면 타임스탬프를 통해 애플리케이션의 지연을 추적할 수 있습니다. 두 관련 메시지(예: “요청 전송”과 “응답 수신”) 사이에 예상보다 더 많은 시간이 경과한 경우 성능 문제의 신호입니다. Default 수준의 애플리케이션 하위 시스템 필터는 밀리초 단위의 정확도로 모든 주요 이벤트를 표시합니다.

메모리 누수 찾기: 메모리 누수가 발생하면 시스템이 memory 카테고리와 Error 수준으로 os_log를 통해 메모리 경고를 보냅니다. Console.app에서 memory 단어로 필터링하고 하위 시스템을 선택합니다. 경고가 5~10초마다 반복되면 애플리케이셩메모리를 적극적으로 소비하고 있는 것입니다. 할당을 추적하기 위해 Debug 로그를 활성화할 수도 있습니다.

네트워크 요청 디버깅: 애플리케이션이 네트워크 이벤트에 os_log를 사용하는 경우 Console.app은 모든 요청과 응답을 시간과 함께 표시합니다. category=network 필터로 노이즈를 줄입니다. 요청과 응답 사이의 시간이 예상을 초과하면 level=Error 메시지를 찾으세요 — 타임아웃 또는 DNS 오류를 나타냅니다.

swift
// Console.app JSON 로그 파싱을 위한 구조
struct LogEntry: Codable {
    let timestamp: String
    let eventMessage: String
    let subsystem: String
    let category: String
    let messageType: UInt8

    var level: String {
        switch messageType {
        case 1: return "Fault"
        case 16: return "Error"
        case 17: return "Debug"
        default: return "Default"
        }
    }
}

자주 묻는 질문

Mac에서 Console.app은 어디에 있나요?

Console.app은 /Applications/Utilities/ 폴더에 있습니다. Spotlight(⌘스페이스 → Console) 또는 Finder → 응용 프로그램 → 유틸리티 → Console을 통해 열 수 있습니다. 앱 아이콘은 기어가 있는 스타일화된 말풍선입니다.

Console.app이 값 대신 <private>을 표시하는 이유는 무엇인가요?

os_log는 기본적으로 문자열과 객체를 private으로 마스킹합니다. Console.app은 프로덕션 모드에서 이를 <private>으로 표시합니다. 실제 값을 보려면 Xcode에서 애플리케이션을 실행하거나 하위 시스템에 대해 Debug 수준의 수집 프로필을 활성화합니다.

내 애플리케이션의 로그만 필터링하려면 어떻게 하나요?

Console.app 사이드바에서 Devices → 기기 → Processes 섹션에서 하위 시스템(com.example.app)을 선택합니다. 또는 검색 필드에 프로세스 이름을 입력하고 드롭다운 목록에서 Process: YourApp을 선택합니다.

Console.app은 로그를 얼마나 오래 저장하나요?

기본적으로 macOS는 사용 가능한 디스크 공간에 따라 .tracev3에 로그를 7~14일 동안 저장합니다. 공간이 부족하면 가장 오래된 로그부터 자동으로 삭제됩니다. sudo log config를 통해 보존 기간을 늘릴 수 있지만 프로덕션 머신에서는 권장되지 않습니다.

Console.app에서 iOS 기기 로그를 볼 수 있나요?

네, iOS 기기를 USB로 Mac에 연결하고 Xcode → Devices를 열어 기기를 선택한 후 Open Console을 클릭합니다. Console.app이 연결된 기기의 로그를 실시간으로 표시합니다. 오프라인 수집을 위해서는 터미널에서 --device 플래그와 함께 log collect를 사용합니다.

요약

  • Console.app — Xcode나 추가 설치 없이 통합 로깅(os_log) 로그를 볼 수 있는 macOS 내장 도구
  • 필터 — AND 조건으로 하위 시스템, 카테고리, 중요도 수준, 텍스트, 정규 표현식 검색으로 특정 앱 로깅 분리
  • 모드 — Live(1~5초 지연의 실시간 스트림) 및 Historical(7~14일 아카이브)으로 이미 발생한 문제 분석
  • 내보내기 — 동료와 공유할 전체 메타데이터가 포함된 .logarchive, 프로그래매틱 분석용 .json, 빠른 보기용 .txt
  • 진단 — Fault 색상 표시와 함께 오류 및 심각한 장애로 필터링하여 Xcode 없이 크래시, 메모리 누수, 네트워크 오류 찾기
  • 원격 기기 — Xcode를 통해 iOS 기기 로그 보기 또는 log collect로 내보내고 Mac의 Console.app에서 .logarchive 열기
  • 개인정보 보호 — os_log는 프로덕션 모드에서 Console.app의 <private> 데이터를 마스킹, 디버깅에는 Xcode 또는 Debug 수준 수집 프로필 사용

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기