Console.app е вградено приложение на macOS за преглед, филтриране и анализ на системни и потребителски логове. Той показва съобщения от unified logging системата на Apple (os_log) в реално време, позволявайки на разработчика да вижда крашове, грешки и отладочни съобщения без свързване към Xcode. Според Apple Support, Console.app поддържа филтриране по subsystem, category, ниво на критичност и процес, както и експорт на логове в .logarchive за предаване на разработчика. Това е незаменим инструмент за диагностика на проблеми на Mac: филтрите и запазените търсения позволяват бързо намиране на грешки в приложението сред хиляди системни съобщения.
Основни точки
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 се състои от три основни области: страничен панел с филтри, таблица със съобщения и панел с детайли на избраното съобщение. Страничният панел съдържа разделите Devices (налични източници на логове), Reports (системни доклади за сривове) и Saved Searches (запазени заявки за търсене).
Таблицата със съобщения показва списък с логове с колони: Time (времеви отпечатък), Category (категория), Level (ниво на критичност — цветна индикация), Process (име на процеса), Message (текст на съобщението). Клик върху произволно съобщение отваря панела с детайли, където се показват subsystem, activity identifier, thread ID и пълният текст с форматиране.
Console.app подчертава съобщенията с цвят: червено за Fault, жълто за Error, синьо за Debug, сиво за Info. Съобщенията по подразбиране не се подчертават. Това позволява визуално сканиране на потока от логове и моментално забелязване на критични събития.
// Логове, които ще се появят в 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, която превръща поток от хиляди съобщения в секунда в четим списък. Полето за търсене в горната част поддържа AND условия: няколко думи, разделени с интервал, показват само съобщения, съдържащи всички думи. Например myapp error ще покаже всички логове на приложението myapp с ниво Error.
Филтър Subsystem в страничния панел позволява избор на един или повече subsystem. Това е най-бързият начин за изолиране на логове на конкретно приложение от системни съобщения. Филтър Category е достъпен след избор на subsystem — показва всички категории, използвани от избраното приложение. Филтър Level ограничава съобщенията по ниво на критичност: могат да се показват само грешки или само отладочни съобщения.
| Тип филтър | Пример | Резултат |
|---|---|---|
| Текст | crash payment | Съобщения, съдържащи crash И payment |
| Subsystem | com.example.myapp | Само логове на посоченото приложение |
| Level | Error + Fault | Само грешки и критични сривове |
| Category | network | Съобщения с категория network |
| Време | Последен 1 час | Съобщения само от избран интервал |
Полето за търсене на Console.app поддържа regex чрез конструкцията REGEX:pattern. Пример: REGEX:error.*tim(e|out) ще намери всички съобщения, съдържащи „erroren“ и дума, започваща с „tim“ и завършваща на „e“ или „out“. Regex работи само в полето за търсене, не във филтрите subsystem или category.
Live — режим на реално време, в който Console.app показва нови съобщения, когато се появят в цикличния буфер на ядрото. Този режим е активен по подразбиране и е подходящ за отстраняване на грешки в работещо приложение: стартирате приложението и виждате неговите логове със закъснение от 1–5 секунди. Бутонът Live (или ⌘L) включва и изключва потока.
Historical — режим на преглед на архива. Console.app съхранява всички съобщения от последните 7–14 дни (конфигурируемо в системата) в базата данни .tracev3. Historical режимът отваря този архив и позволява търсене по всякакви филтри, а не само по текущия поток. Това е незаменимо за анализ на проблеми, възникнали през нощта или когато приложението е работило без връзка с Mac.
Превключването между режимите става чрез бутона Live в лентата с инструменти. Когато Live е изключен, Console.app показва исторически данни. В този режим можете да навигирате по времевата линия с помощта на календара или бутоните ← →. Историческите данни са достъпни само за логове, запазени на диска — съобщения, които са били презаписани в цикличния буфер, не попадат в архива.
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 — логовете са от отдалеченото устройство, но филтрите и търсенето работят същото като с локални логове.
// Експорт на логове от 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 на вашето приложение, за да изключите системни логове, които могат да съдържат поверителна информация на други процеси.
Диагностика на срив без Xcode: ако приложението се е сриналo при стартиране извън Xcode, Console.app ще покаже Fault съобщение от процеса. Намерете в страничния панел Reports → Crash Reports — там се показват пълни доклади за сривове с подпис и стек. Използвайте филтъра subsystem за вашето приложение и задайте ниво Error+Fault, за да видите всички критични събития преди срива.
Console.app позволява проследяване на закъснения в приложението на базата на времеви отпечатъци. Ако между две свързани съобщения (например „Заявката е изпратена“ и „Отговорът е получен“) е изминало повече време от очакваното — това е сигнал за проблем с производителността. Филтърът по subsystem на вашето приложение с ниво Default ще покаже всички ключови събития с точност до милисекунда.
Търсене на изтичане на памет: при изтичане на памет системата изпраща предупреждение за памет чрез os_log с категория memory и ниво Error. В Console.app филтрирайте по думата memory и изберете вашия subsystem. Ако предупреждението се повтаря на всеки 5–10 секунди — приложението активно консумира памет. Допълнително можете да включите Debug логове за проследяване на алокации.
Отстраняване на грешки в мрежови заявки: ако вашето приложение използва os_log за мрежови събития, Console.app ще покаже всички заявки и отговори с времеви данни. Филтърът category=network намалява шума. Ако времето между заявка и отговор надвишава очакваното, търсете съобщения с level=Error — те ще посочат таймаути или DNS грешки.
// Структура за парсване на 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 се намира в папка /Applications/Utilities/. Може да се отвори чрез Spotlight (⌘Интервал → Console) или чрез Finder → Програми → Помощни програми → Конзола. Иконата на приложението е стилизиран балон за говор с зъбно колело.
os_log маскира низове и обекти като private по подразбиране. Console.app ги показва като <private> в продукционен режим. За да видите реалните стойности, стартирайте приложението от Xcode или включете профил за събиране с ниво Debug за вашия subsystem.
В страничния панел на Console.app изберете вашия subsystem (com.example.app) в раздела Devices → вашето устройство → Processes. Алтернативно — въведете името на процеса в полето за търсене и изберете Process: YourApp от падащия списък.
По подразбиране macOS съхранява логове в .tracev3 в продължение на 7–14 дни в зависимост от наличното дисково пространство. При недостиг на пространство най-старите логове се изтриват автоматично. Срокът на съхранение може да се увеличи чрез sudo log config, но това не се препоръчва за продукционни машини.
Да, свържете iOS устройството към Mac чрез USB, отворете Xcode → Devices → изберете устройството → Open Console. Console.app ще покаже логовете на свързаното устройство в реално време. За самостоятелно събиране използвайте log collect в терминала с флаг --device.
Обобщение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също