Console.app je vestavěná aplikace macOS pro prohlížení, filtrování a analýzu systémových a uživatelských logů. Zobrazuje zprávy z unified logging systému Apple (os_log) v reálném čase, což umožňuje vývojáři vidět crashy, chyby a ladící zprávy bez připojení k Xcode. Podle Apple Support Console.app podporuje filtrování podle subsystem, category, úrovně závažnosti a procesu, stejně jako export logů do .logarchive pro předání vývojáři. Je to nepostradatelný nástroj pro diagnostiku problémů na Macu: filtry a uložená vyhledávání umožňují rychle najít chyby v aplikaci mezi tisíci systémových zpráv.
Hlavní body
Console.app je grafické rozhraní k unified logging systému Apple. Nahradila starou aplikaci Console (jako součást macOS) a poskytuje přístup ke všem systémovým logům a logům aplikací zaznamenaným prostřednictvím API os_log, os_trace a syslog. Console.app je k dispozici v /Applications/Utilities/ na každém Macu.
Na rozdíl od Xcode, které zobrazuje pouze logy aplikace spuštěné z IDE, Console.app zobrazuje logy všech procesů v systému současně. To umožňuje diagnostikovat problémy, které vznikají pouze při spuštění aplikace mimo Xcode nebo na pozadí. Console.app také zobrazuje systémové logy — kernel, launchd, WindowServer, což je užitečné pro ladění nízkoúrovňových problémů.
Console.app nevyžaduje instalaci dalších nástrojů nebo připojení k internetu. Všechna data jsou uložena lokálně v databázi .tracev3 a aplikace pracuje zcela offline. Pro prohlížení logů z jiného Macu nebo zařízení iOS se používá příkaz log collect následovaný otevřením .logarchive v Console.app.
Rozhraní Console.app se skládá ze tří hlavních oblastí: boční panel s filtry, tabulka zpráv a panel podrobností vybrané zprávy. Boční panel obsahuje sekce Devices (dostupné zdroje logů), Reports (systémové zprávy o pádech) a Saved Searches (uložené dotazy vyhledávání).
Tabulka zpráv zobrazuje seznam logů se sloupci: Time (časové razítko), Category (kategorie), Level (úroveň závažnosti — barevná indikace), Process (název procesu), Message (text zprávy). Kliknutím na libovolnou zprávu se otevře panel podrobností, kde jsou zobrazeny subsystem, activity identifier, thread ID a plný text s formátováním.
Console.app zvýrazňuje zprávy barvou: červená pro Fault, žlutá pro Error, modrá pro Debug, šedá pro Info. Výchozí zprávy nejsou zvýrazněny. To umožňuje vizuální skenování proudu logů a okamžité zaznamenání kritických událostí.
// Logy, které se objeví v 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")
// Tyto zprávy jsou viditelné v Console.app s filtrem „myapp“
Filtrování — hlavní funkce Console.app, která přeměňuje proud tisíců zpráv za sekundu na čitelný seznam. Vyhledávací pole nahoře podporuje podmínky AND: několik slov oddělených mezerou zobrazuje pouze zprávy obsahující všechna slova. Například myapp error zobrazí všechny logy aplikace myapp s úrovní Error.
Filtr Subsystem v bočním panelu umožňuje vybrat jeden nebo více subsystemů. Toto je nejrychlejší způsob, jak izolovat logy konkrétní aplikace od systémových zpráv. Filtr Category je k dispozici po výběru subsystemu — zobrazuje všechny kategorie používané vybranou aplikací. Filtr Level omezuje zprávy podle úrovně závažnosti: lze zobrazit pouze chyby nebo pouze ladící zprávy.
| Typ filtru | Příklad | Výsledek |
|---|---|---|
| Text | crash payment | Zprávy obsahující crash A payment |
| Subsystem | com.example.myapp | Pouze logy uvedené aplikace |
| Level | Error + Fault | Pouze chyby a kritické pády |
| Category | network | Zprávy s kategorií network |
| Čas | Poslední 1 hodina | Zprávy pouze z vybraného intervalu |
Vyhledávací pole Console.app podporuje regex pomocí konstrukce REGEX:pattern. Příklad: REGEX:error.*tim(e|out) najde všechny zprávy obsahující „erroren“ a slovo začínající na „tim“ a končící na „e“ nebo „out“. Regex funguje pouze ve vyhledávacím poli, ne ve filtrech subsystem nebo category.
Live — režim reálného času, ve kterém Console.app zobrazuje nové zprávy, jak se objevují v kruhové vyrovnávací paměti jádra. Tento režim je ve výchozím nastavení aktivní a je vhodný pro ladění běžící aplikace: spustíte aplikaci a vidíte její logy se zpožděním 1–5 sekund. Tlačítko Live (nebo ⌘L) zapíná a vypíná datový proud.
Historical — režim prohlížení archivu. Console.app ukládá všechny zprávy za posledních 7–14 dní (nastavitelné v systému) v databázi .tracev3. Režim Historical otevírá tento archiv a umožňuje vyhledávání podle libovolných filtrů, nejen v aktuálním proudu. To je nepostradatelné pro analýzu problémů, které nastaly v noci nebo když aplikace pracovala bez připojení k Macu.
Přepínání mezi režimy se provádí pomocí tlačítka Live na panelu nástrojů. Když je Live vypnutý, Console.app zobrazuje historická data. V tomto režimu lze navigovat na časové ose pomocí kalendáře nebo tlačítek ← →. Historická data jsou k dispozici pouze pro logy uložené na disk — zprávy přepsané v kruhové vyrovnávací paměti se do archivu nedostanou.
Console.app podporuje export filtrovaných logů v několika formátech. File → Export → Save vybírá formát: .logarchive (nativní formát Apple, zahrnuje všechna metadata), .txt (prostý text se sloupci) a .json (strukturovaná data s poli). Pro připojení k hlášení o chybě použijte .logarchive — lze jej otevřít na libovolném Macu v Console.app.
Export ze zařízení iOS: přes Xcode (Devices → Open Console) nebo přes příkaz log collect --device --output ./archive.logarchive v terminálu. Získaný .logarchive otevřete v Console.app na Macu — logy pocházejí ze vzdáleného zařízení, ale filtry a vyhledávání fungují stejně jako s lokálními logy.
// Export logů zařízení iOS přes terminál
// log collect --device --output ./ios_crash.logarchive
// log show --subsystem com.example.app --last 1h --output json
// Příklad: export logů z poslední hodiny
// log show --predicate 'subsystem == "com.example.myapp"' \
// --info --debug --last 1h --output json > logs.json
// Parsování exportovaných logů v Swiftu
let jsonData = try Data(contentsOf: URL(fileURLWithPath: "logs.json"))
let decoded = try JSONDecoder()
.decode([LogEntry].self, from: jsonData)
.logarchive — optimální formát pro odeslání kolegovi nebo připojení k JIRA ticketu. Soubor obsahuje nejen zprávy, ale také subsystem, category, timestamps, thread ID a všechna metadata. Velikost archivu je díky kompresi .tracev3 výrazně menší než syrové logy. Před odesláním se ujistěte, že logy neobsahují soukromá data: použijte filtr subsystem vaší aplikace k vyloučení systémových logů, které mohou obsahovat důvěrné informace jiných procesů.
Diagnostika pádu bez Xcode: pokud aplikace spadla při spuštění mimo Xcode, Console.app zobrazí Fault zprávu od procesu. Najděte v bočním panelu Reports → Crash Reports — tam se zobrazují úplné zprávy o pádech s podpisem a zásobníkem. Použijte filtr subsystem pro vaši aplikaci a nastavte úroveň Error+Fault, abyste viděli všechny kritické události před pádem.
Console.app umožňuje sledovat zpoždění v aplikaci na základě časových razítek. Pokud mezi dvěma souvisejícími zprávami (například „Požadavek odeslán“ a „Odpověď přijata“) uplynulo více času, než se očekávalo — to je signál problému s výkonem. Filtr podle subsystem vaší aplikace s úrovní Default zobrazí všechny klíčové události s přesností na milisekundu.
Hledání úniku paměti: při úniku paměti systém odesílá varování o paměti přes os_log s kategorií memory a úrovní Error. V Console.app filtrujte podle slova memory a vyberte svůj subsystem. Pokud se varování opakuje každých 5–10 sekund — aplikace aktivně spotřebovává paměť. Dodatečně lze zapnout Debug logy pro sledování alokací.
Ladění síťových požadavků: pokud vaše aplikace používá os_log pro síťové události, Console.app zobrazí všechny požadavky a odpovědi s časováním. Filtr category=network snižuje šum. Pokud čas mezi požadavkem a odpovědí překračuje očekávání, hledejte zprávy s level=Error — ty ukážou na time-outy nebo DNS chyby.
// Struktura pro parsování JSON logů 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"
}
}
}
Často kladené otázky
Console.app se nachází ve složce /Applications/Utilities/. Lze ji otevřít přes Spotlight (⌘Mezerník → Console) nebo přes Finder → Programy → Utility → Konzole. Ikona aplikace je stylizovaná řečová bublina s ozubeným kolem.
os_log maskuje řetězce a objekty jako private ve výchozím nastavení. Console.app je zobrazuje jako <private> v produkčním režimu. Chcete-li vidět skutečné hodnoty, spusťte aplikaci z Xcode nebo zapněte profil sběru s úrovní Debug pro váš subsystem.
V bočním panelu Console.app vyberte svůj subsystem (com.example.app) v sekci Devices → vaše zařízení → Processes. Alternativně — zadejte název procesu do vyhledávacího pole a vyberte Process: YourApp z rozbalovacího seznamu.
Ve výchozím nastavení macOS uchovává logy v .tracev3 po dobu 7–14 dní v závislosti na dostupném místě na disku. Při nedostatku místa jsou nejstarší logy automaticky smazány. Doba uchovávání lze prodloužit pomocí sudo log config, ale to není doporučeno pro produkční stroje.
Ano, připojte zařízení iOS k Macu přes USB, otevřete Xcode → Devices → vyberte zařízení → Open Console. Console.app zobrazí logy připojeného zařízení v reálném čase. Pro samostatný sběr použijte log collect v terminálu s přepínačem --device.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také