Console.app, sistem ve kullanıcı loglarını görüntülemek, filtrelemek ve analiz etmek için macOS'e entegre edilmiş bir uygulamadır. Apple'ın birleşik loglama sisteminden (os_log) gerçek zamanlı olarak mesajları görüntüler ve geliştiricinin Xcode'a bağlanmadan çökmeleri, hataları ve hata ayıklama mesajlarını görmesini sağlar. Apple Support'a göre Console.app, alt sistem, kategori, kritiklik düzeyi ve sürece göre filtrelemenin yanı sıra logların .logarchive olarak dışa aktarılmasını da destekler. Mac'teki sorunları teşhis etmek için vazgeçilmez bir araçtır: filtreler ve kaydedilmiş aramalar, binlerce sistem mesajı arasında uygulama hatalarını hızla bulmanızı sağlar.
Önemli Noktalar
Console.app, Apple'ın birleşik loglama sisteminin grafiksel bir arayüzüdür. Eski Console uygulamasının (macOS'in bir parçası olarak) yerini almış ve os_log, os_trace ve syslog API'leri aracılığıyla yazılan tüm sistem ve uygulama loglarına erişim sağlar. Console.app herhangi bir Mac'te /Applications/Utilities/ konumunda bulunur.
Xcode'un yalnızca IDE'den başlatılan uygulamanın loglarını göstermesinin aksine, Console.app sistemdeki tüm süreçlerin loglarını aynı anda görüntüler. Bu, uygulama Xcode dışında veya arka planda başlatıldığında ortaya çıkan sorunları teşhis etmeyi sağlar. Console.app ayrıca sistem loglarını da gösterir — kernel, launchd, WindowServer — düşük seviyeli sorunların hata ayıklaması için kullanışlıdır.
Console.app ek araç kurulumu veya internet bağlantısı gerektirmez. Tüm veriler yerel olarak bir .tracev3 veritabanında saklanır ve uygulama tamamen çevrimdışı çalışır. Başka bir Mac veya iOS cihazından logları görüntülemek için log collect komutunu kullanın ve ardından .logarchive dosyasını Console.app'te açın.
Console.app arayüzü üç ana alandan oluşur: filtrelerin bulunduğu kenar çubuğu, mesaj tablosu ve seçili mesajın ayrıntı paneli. Kenar çubuğu, Devices (mevcut log kaynakları), Reports (sistem çökme raporları) ve Saved Searches (kaydedilmiş arama sorguları) bölümlerini içerir.
Mesaj tablosu, sütunları olan bir log listesi görüntüler: Time (zaman damgası), Category (kategori), Level (kritiklik düzeyi — renk kodlu), Process (süreç adı), Message (mesaj metni). Herhangi bir mesaja tıklamak, alt sistemi, etkinlik tanımlayıcısını, iş parçacığı kimliğini ve biçimlendirilmiş tam metni gösteren ayrıntı panelini açar.
Console.app mesajları renkle vurgular: Fault için kırmızı, Error için sarı, Debug için mavi, Info için gri. Varsayılan mesajlar vurgulanmaz. Bu, log akışını görsel olarak taramanızı ve kritik olayları anında fark etmenizi sağlar.
// Console.app'te görünecek loglar
import OSLog
let logger = Logger(
subsystem: "com.example.myapp",
category: "network"
)
logger.error("Connection failed: timeout")
logger.debug("Retry attempt 3 of 5")
// Bu mesajlar Console.app'te "myapp" filtresiyle görülebilir
Filtreleme, Console.app'in ana özelliğidir ve saniyede binlerce mesajlık bir akışı okunabilir bir listeye dönüştürür. Üst kısımdaki arama alanı AND koşullarını destekler: boşlukla ayrılmış birden çok sözcük, yalnızca tüm sözcükleri içeren mesajları gösterir. Örneğin, myapp error myapp uygulamasının Error düzeyindeki tüm loglarını gösterir.
Kenar çubuğundaki Alt sistem filtresi bir veya daha fazla alt sistem seçmenize olanak tanır. Bu, belirli bir uygulamanın loglarını sistem mesajlarından ayırmanın en hızlı yoludur. Kategori filtresi bir alt sistem seçtikten sonra kullanılabilir — seçili uygulama tarafından kullanılan tüm kategorileri gösterir. Düzey filtresi mesajları kritiklik düzeyine göre kısıtlar: yalnızca hatalar veya yalnızca hata ayıklama mesajları gösterilebilir.
| Filtre Türü | Örnek | Sonuç |
|---|---|---|
| Metin | crash payment | crash VE payment içeren mesajlar |
| Subsystem | com.example.myapp | Yalnızca belirtilen uygulamanın logları |
| Level | Error + Fault | Yalnızca hatalar ve kritik arızalar |
| Category | network | network kategorisindeki mesajlar |
| Süre | Son 1 saat | Yalnızca seçili aralıktaki mesajlar |
Console.app arama alanı, REGEX:pattern yapısı aracılığıyla düzenli ifadeleri destekler. Örnek: REGEX:error.*tim(e|out) “error” içeren ve “tim” ile başlayıp “e” veya “out” ile biten bir sözcük içeren tüm mesajları bulur. Düzenli ifadeler yalnızca arama alanında çalışır, alt sistem veya kategori filtrelerinde çalışmaz.
Live, Console.app'in çekirdek halka tamponunda yeni mesajlar göründükçe gösterdiği gerçek zamanlı moddur. Bu mod varsayılan olarak etkindir ve çalışan bir uygulamada hata ayıklamak için uygundur: uygulamayı başlatır ve loglarını 1–5 saniyelik bir gecikmeyle görürsünüz. Live düğmesi (veya ⌘L) akışı açar ve kapatır.
Historical arşiv görüntüleme modudur. Console.app, son 7–14 güne ait (sistemde yapılandırılabilir) tüm mesajları bir .tracev3 veritabanında saklar. Historical modu bu arşivi açar ve yalnızca geçerli akışta değil, herhangi bir filtre kullanarak arama yapmanızı sağlar. Bu, gece veya uygulama bir Mac'e bağlı olmadan çalışırken meydana gelen sorunları analiz etmek için vazgeçilmezdir.
Modlar arasında geçiş, araç çubuğundaki Live düğmesi aracılığıyla yapılır. Live kapalıyken Console.app geçmiş verileri gösterir. Bu modda takvim veya ← → düğmelerini kullanarak zaman çizelgesinde gezinebilirsiniz. Geçmiş veriler yalnızca diske kaydedilen loglar için kullanılabilir — halka tamponda üzerine yazılan mesajlar arşivde görünmez.
Console.app filtrelenmiş logların çeşitli biçimlerde dışa aktarılmasını destekler. File → Export → Save biçimi seçmenizi sağlar: .logarchive (Apple'ın yerel biçimi, tüm meta verileri içerir), .txt (sütunlu düz metin) ve .json (alanlı yapılandırılmış veri). Bir hata raporuna eklemek için .logarchive kullanın — herhangi bir Mac'te Console.app'te açılabilir.
iOS cihazından dışa aktarma: Xcode (Devices → Open Console) aracılığıyla veya terminalde log collect --device --output ./archive.logarchive komutuyla. Sonuç .logarchive dosyasını bir Mac'te Console.app'te açın — loglar uzak cihazdan gelir, ancak filtreler ve arama yerel loglarla aynı şekilde çalışır.
// Terminal aracılığıyla iOS cihaz loglarını dışa aktarma
// log collect --device --output ./ios_crash.logarchive
// log show --subsystem com.example.app --last 1h --output json
// Örnek: son bir saatin loglarını dışa aktar
// log show --predicate 'subsystem == "com.example.myapp"' \
// --info --debug --last 1h --output json > logs.json
// Swift'te dışa aktarılan logları ayrıştırma
let jsonData = try Data(contentsOf: URL(fileURLWithPath: "logs.json"))
let decoded = try JSONDecoder()
.decode([LogEntry].self, from: jsonData)
.logarchive bir meslektaşa göndermek veya bir JIRA biletine eklemek için en uygun biçimdir. Dosya yalnızca mesajları değil, aynı zamanda alt sistemi, kategoriyi, zaman damgalarını, iş parçacığı kimliklerini ve tüm meta verileri içerir. .tracev3 sıkıştırması sayesinde arşiv boyutu ham loglardan önemli ölçüde daha küçüktür. Göndermeden önce logların özel veri içermediğinden emin olun: diğer süreçlerin gizli bilgilerini içerebilecek sistem loglarını hariç tutmak için uygulamanızın alt sistemine göre bir filtre kullanın.
Xcode olmadan çökme teşhisi: bir uygulama Xcode dışında başlatıldığında çökerse, Console.app süreçten bir Fault mesajı gösterecektir. Kenar çubuğunda Reports → Crash Reports'u bulun — imza ve yığın içeren tam çökme raporları görüntülenir. Uygulamanız için alt sistem filtresini kullanın ve çökmeden önceki tüm kritik olayları görmek için düzeyi Error+Fault olarak ayarlayın.
Console.app, zaman damgalarını kullanarak uygulamadaki gecikmeleri izlemenizi sağlar. İki ilgili mesaj (örneğin, “istek gönderildi” ve “yanıt alındı”) arasında beklenenden fazla zaman geçmişse, bu bir performans sorununun işaretidir. Varsayılan düzeyde uygulamanızın alt sistemindeki bir filtre, tüm önemli olayları milisaniye hassasiyetinde gösterecektir.
Bellek sızıntısı bulma: bir bellek sızıntısı oluştuğunda, sistem memory kategorisi ve Error düzeyiyle os_log aracılığıyla bir bellek uyarısı gönderir. Console.app'te memory sözcüğüyle filtreleyin ve alt sisteminizi seçin. Uyarı her 5–10 saniyede bir tekrarlanıyorsa, uygulama aktif olarak bellek tüketiyor demektir. Ayırmaları izlemek için Debug loglarını da etkinleştirebilirsiniz.
Ağ isteklerinde hata ayıklama: uygulamanız ağ olayları için os_log kullanıyorsa, Console.app tüm istekleri ve yanıtları zamanlamalarla gösterecektir. Bir category=network filtresi gürültüyü azaltır. İstek ve yanıt arasındaki süre beklentileri aşarsa, level=Error olan mesajları arayın — zaman aşımlarına veya DNS hatalarına işaret ederler.
// Console.app JSON loglarını ayrıştırmak için yapı
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"
}
}
}
Sıkça Sorulan Sorular
Console.app /Applications/Utilities/ klasöründe bulunur. Spotlight (⌘Boşluk → Console) veya Finder → Uygulamalar → Araçlar → Console aracılığıyla açabilirsiniz. Uygulama simgesi, bir dişli çarkla stilize edilmiş bir konuşma balonudur.
os_log varsayılan olarak dizeleri ve nesneleri private olarak maskeler. Console.app bunları üretim modunda <private> olarak görüntüler. Gerçek değerleri görmek için uygulamayı Xcode'dan başlatın veya alt sisteminiz için Debug düzeyinde bir toplama profili etkinleştirin.
Console.app kenar çubuğunda, Devices → cihazınız → Processes bölümünde alt sisteminizi (com.example.app) seçin. Alternatif olarak, arama alanına süreç adını girin ve açılır listeden Process: YourApp'i seçin.
Varsayılan olarak macOS, kullanılabilir disk alanına bağlı olarak logları .tracev3'te 7–14 gün saklar. Alan azaldığında en eski loglar otomatik olarak silinir. Saklama süresi sudo log config ile artırılabilir, ancak üretim makineleri için önerilmez.
Evet, iOS cihazınızı USB üzerinden bir Mac'e bağlayın, Xcode → Devices'ı açın → cihazı seçin → Open Console. Console.app bağlı cihazın loglarını gerçek zamanlı olarak görüntüleyecektir. Çevrimdışı toplama için terminalde --device bayrağıyla log collect komutunu kullanın.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun