Console.app је уграђена апликација macOS-а за преглед, филтрирање и анализу системских и корисничких дневника. Приказује поруке из Apple-овог unified logging система (os_log) у реалном времену, омогућавајући програмеру да види крашеве, грешке и отклањајуће поруке без повезивања на Xcode. Према Apple Support-у, Console.app подржава филтрирање по subsystem, category, нивоу критичности и процесу, као и извоз дневника у .logarchive за пренос програмеру. Ово је незамјењив алат за дијагностику проблема на Mac-у: филтери и сачуване претраге омогућавају брзо проналажење грешака у апликацији међу хиљадама системских порука.
Главне тачке
Console.app је графички интерфејс за Apple-ов unified logging систем. Замијенила је стару апликацију 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) ће пронаћи све поруке које садрже „error“ и ријеч која почиње са „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 приказује историјске податке. У овом режиму се може кретати по временској оси помоћу календара или дугмића ← →. 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-у — дневници су са удаљеног уређаја, али филтери и претрага раде исто као са локалним дневницима.
// Извоз дневника 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-а: ако се апликација срушила при покретању изван 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. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође