Console.app: что это, функции и как читать логи в macOS

Автор: IT Sectr Опубликовано: 2026-05-29 Время чтения: 8 мин

Console.app — это встроенное приложение macOS для просмотра, фильтрации и анализа системных и пользовательских логов. Оно отображает сообщения из unified logging system Apple (os_log) в реальном времени, позволяя разработчику видеть краши, ошибки и отладочные сообщения без подключения к Xcode. По данным Apple Support, Console.app поддерживает фильтрацию по subsystem, category, уровню критичности и процессу, а также экспорт логов в .logarchive для передачи разработчику. Это незаменимый инструмент для диагностики проблем на Mac: фильтры и сохранённые поиски позволяют быстро находить ошибки в приложении среди тысяч системных сообщений.

Главное

  • Console.app — встроенный просмотрщик логов macOS, работающий с unified logging системой Apple
  • Фильтрация — поиск по subsystem, category, уровню (Error, Fault, Debug) и тексту сообщения с поддержкой регулярных выражений
  • Режимы — Live (реалтайм-поток) и Historical (архивные логи), переключение через панель инструментов
  • Экспорт — сохранение логов в .logarchive, .txt и .json для передачи разработчику или прикрепления к баг-репорту
  • Сохранённые поиски — именованные фильтры для типовых сценариев: все ошибки приложения, логи сети, CrashReporter

Что такое Console.app

Console.app — это графический интерфейс к unified logging системе Apple. Она заменила старое приложение Console (как часть macOS) и предоставляет доступ ко всем логам системы и приложений, записанным через API os_log, os_trace и syslog. Console.app доступна в /Applications/Utilities/ на любом Mac.

В отличие от Xcode, который показывает логи только для запущенного из IDE приложения, Console.app отображает логи всех процессов на системе одновременно. Это позволяет диагностировать проблемы, которые возникают только при запуске приложения вне Xcode или в фоновом режиме. Console.app также показывает системные логи — kernel, 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 (текст сообщения). Клик на любое сообщение открывает панель деталей, где показаны subsystem, activity identifier, thread 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")

// Эти сообщения видны в Console.app с фильтром "myapp"

Фильтры и поиск в Console.app

Фильтрация — основная функция Console.app, превращающая поток из тысяч сообщений в секунду в читаемый список. Поле поиска в верхней части поддерживает AND-условия: несколько слов разделяются пробелом, и отображаются только сообщения, содержащие все слова. Например, myapp error покажет все логи приложения myapp с уровнем Error.

Subsystem-фильтр в боковой панели позволяет выбрать один или несколько subsystem. Это самый быстрый способ изолировать логи конкретного приложения от системных сообщений. Category-фильтр доступен после выбора subsystem — он показывает все категории, используемые выбранным приложением. Level-фильтр ограничивает сообщения по уровню критичности: можно показать только ошибки или только отладочные сообщения.

Тип фильтраПримерРезультат
Текстcrash paymentСообщения, содержащие crash И payment
Subsystemcom.example.myappТолько логи указанного приложения
LevelError + FaultТолько ошибки и критические сбои
CategorynetworkСообщения с категорией network
ВремяПоследние 1 часСообщения только за выбранный интервал

Регулярные выражения в поиске

Поле поиска Console.app поддерживает regex через конструкцию REGEX:pattern. Пример: REGEX:error.*tim(e|out) найдёт все сообщения, содержащие "error" и слово, начинающееся с "tim" и заканчивающееся на "e" или "out". Regex работает только в поле поиска, не в фильтрах subsystem или category.

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 откройте в Console.app на Mac — логи устроены с удалённого устройства, но фильтры и поиск работают так же, как с локальными логами.

swift
// Экспорт логов iOS-устройства через терминал
// log collect --device --output ./ios_crash.logarchive
// log show --subsystem com.example.app --last 1h --output json

// Пример: выгрузить логи за последний час
// 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-тикету. Файл содержит не только сообщения, но и subsystem, category, timestamps, thread IDs и все метаданные. Размер архива значительно меньше сырых логов благодаря сжатию .tracev3. Перед отправкой убедитесь, что в логах нет приватных данных: используйте фильтр по subsystem вашего приложения, чтобы исключить системные логи, которые могут содержать конфиденциальную информацию других процессов.

Практические примеры отладки через Console.app

Диагностика креша без Xcode: если приложение упало при запуске не из Xcode, Console.app покажет Fault-сообщение от процесса. Найдите в боковой панели Reports → Crash Reports — там отображаются полные отчёты о падениях с сигнатурой и стеком. Используйте фильтр subsystem для вашего приложения и установите уровень Error+Fault, чтобы увидеть все критические события перед крешем.

Анализ производительности через Console.app

Console.app позволяет отслеживать задержки в приложении по временным меткам. Если между двумя связанными сообщениями (например, "запрос отправлен" и "ответ получен") прошло больше ожидаемого времени — это сигнал о проблеме с производительностью. Фильтр по subsystem вашего приложения с уровнем Default покажет все ключевые события с точностью до миллисекунды.

Поиск утечки памяти: при утечке памяти система отправляет memory warning через os_log с category memory и уровнем Error. В Console.app отфильтруйте по слову memory и выберите ваш subsystem. Если warning повторяется каждые 5–10 секунд — приложение активно потребляет память. Дополнительно можно включить Debug-логи для отслеживания аллокаций.

Отладка сетевых запросов: если ваше приложение использует os_log для сетевых событий, Console.app покажет все запросы и ответы с таймингами. Фильтр category=network снизит шум. Если время между запросом и ответом превышает ожидаемое, ищите сообщения с level=Error — они укажут на таймауты или ошибки DNS.

swift
// Структура для парсинга JSON-логов Console.app
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"
        }
    }
}

Часто задаваемые вопросы

Где находится Console.app на Mac?

Console.app находится в папке /Applications/Utilities/. Открыть её можно через Spotlight (⌘Пробел → Console) или через Finder → Программы → Утилиты → Консоль. Иконка приложения — стилизованная речевая выноска с шестерёнкой.

Почему Console.app показывает <private> вместо значений?

os_log маскирует строки и объекты как private по умолчанию. Console.app отображает их как <private> в production-режиме. Чтобы увидеть реальные значения, запустите приложение из Xcode или включите профиль сбора с уровнем Debug для вашего subsystem.

Как отфильтровать логи только моего приложения?

В боковой панели Console.app выберите ваш subsystem (com.example.app) в разделе Devices → ваше устройство → Processes. Альтернатива — введите имя процесса в поле поиска и выберите Process: YourApp из выпадающего списка.

Как долго Console.app хранит логи?

По умолчанию macOS хранит логи в .tracev3 в течение 7–14 дней в зависимости от доступного дискового пространства. При нехватке места самые старые логи удаляются автоматически. Срок хранения можно увеличить через sudo log config, но это не рекомендуется для production-машин.

Можно ли смотреть логи iOS-устройства в Console.app?

Да, подключите iOS-устройство к Mac через USB, откройте Xcode → Devices → выберите устройство → Open Console. Console.app отобразит логи с подключённого устройства в реальном времени. Для автономного сбора используйте log collect в терминале с флагом --device.

Итоги

  • Console.app — встроенный инструмент macOS для просмотра логов unified logging (os_log), не требующий Xcode или дополнительных установок
  • Фильтры — поиск по subsystem, category, уровню критичности, тексту и regex с AND-условиями для изоляции логирования конкретного приложения
  • Режимы — Live (реалтайм-поток с задержкой 1–5 секунд) и Historical (архив за 7–14 дней) для анализа проблем, которые уже произошли
  • Экспорт — .logarchive с полными метаданными для передачи коллегам, .json для программного анализа, .txt для быстрого просмотра
  • Диагностика — поиск крешей, утечек памяти и сетевых ошибок без Xcode через фильтрацию по ошибкам и критическим сбоям с цветовой индикацией Fault
  • Удалённые устройства — просмотр логов iOS-устройства через Xcode или экспорт через log collect с последующим открытием .logarchive в Console.app на Mac
  • Приватность — os_log маскирует <private>-данные в Console.app в production-режиме; для отладки используйте Xcode или профиль сбора Debug-уровня

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также