CocoaLumberjack, iOS ve macOS için logger'lar, biçimlendiriciler ve filtrelerden oluşan modüler bir mimari üzerine inşa edilmiş yüksek performanslı bir loglama kütüphanesidir. GitHub, 2024'e göre, kütüphane toplam 500 milyondan fazla kullanıcıya sahip Apple uygulamalarında kullanılmakta ve performans üzerinde gözle görülür bir etki olmadan saniyede 10.000'den fazla log işlemeyi desteklemektedir. NSLog ve OSLog'un aksine, CocoaLumberjack arka planda yazma ile eşzamansız logger'lardan oluşan esnek bir iş hattı sağlar.
Önemli Noktalar
CocoaLumberjack, 2010 yılında Robbie Hanson ve Deusty Designs tarafından oluşturulan Apple ekosistemi için açık kaynaklı bir loglama kütüphanesidir. Ana motivasyon, NSLog'un düşük performansıydı — terminale eşzamanlı yazma, az sayıda mesajda bile UI iş parçacığını yavaşlatıyordu.
Kütüphane çoklu logger mimarisi üzerine inşa edilmiştir: tek bir log mesajı birden fazla logger tarafından aynı anda işlenir. Her logger mesajı alır, kendi kurallarına göre biçimlendirir ve kendi kanalına (dosya, konsol, OSLog, uzak sunucu veya ağ) yazar. Tüm logger'lar arka plan kuyruğunda eşzamansız olarak çalışır ve UI iş parçacığını engellemez.
Deusty Designs Benchmarks, 2023'e göre, CocoaLumberjack bir dosyaya yazarken saniyede 10.200 log mesajı işlerken, NSLog aynı yük altında maksimum 1.200 mesaj sağlar. 8,5 katlık fark, eşzamansız mimari ve minimum kilitlemeden kaynaklanmaktadır.
Kütüphane iOS, macOS, tvOS, watchOS ve Swift Package Manager, CocoaPods ve Carthage'ı destekler. Mevcut kararlı sürüm, Swift 5.9+ ve Objective-C ARC ile uyumlu 3.8.5'tir (2024).
CocoaLumberjack'in merkezi bileşeni, tüm loglama işlemleri için bir cephe görevi gören DDLog sınıfıdır. Geliştirici DDLog statik yöntemlerini çağırır ve cephe, mesajları kayıtlı logger'lara eşzamansız olarak dağıtır. Her logger, log(message:) yöntemiyle DDLogger protokolünü uygular ve biçimlendirilmiş hazır bir mesaj alır.
DDAbstractLogger, özel logger'lar oluşturmak için temel işlevsellik sağlar: eşzamansız yazma için kuyruk, biçimlendirici ve filtreleme desteği. Geliştiricinin kendi logger'ını uygulamak için yalnızca log(message: DDLogMessage) yöntemini geçersiz kılması yeterlidir — örneğin, özel bir API'ye veya WebSocket'e log göndermek için.
CocoaLumberjack dört yerleşik logger ile birlikte gelir: DDOSLogger — OSLog çıktısı (NSLog'un modern alternatifi), DDTTYLogger — renk vurgulamalı Xcode konsolu çıktısı (XcodeColors gerektirir), DDFileLogger — otomatik döndürmeli dosya yazma, DDASLLogger — Apple System Log çıktısı (iOS 15'ten beri kullanımdan kaldırıldı, DDOSLogger ile değiştirildi).
import CocoaLumberjack
import CocoaLumberjackSwift
// AppDelegate'de logger kurulumu
func configureLogging() {
// OSLog — sistem loglaması için
DDLog.add(DDOSLogger(sharedInstance))
// Döndürmeli dosya logger'ı
let fileLogger = DDFileLogger()
fileLogger.rollingFrequency = 86400 // 24 saat
fileLogger.maximumNumberOfLogFiles = 7
DDLog.add(fileLogger)
// Konsol — yalnızca hata ayıklama
#if DEBUG
DDLog.add(DDTTYLogger(sharedInstance))
#endif
}
Her logger için log seviyesi yapılandırması, veri akışının esnek bir şekilde kontrol edilmesini sağlar. Örneğin, DDFileLogger tüm seviyeleri (Debug ve üstü) kabul edebilirken, DDOSLogger yalnızca Warn ve Error'u kabul eder. Bu, her logger'ın logLevel özelliği aracılığıyla uygulanır.
CocoaLumberjack'in kurulumu Swift Package Manager, CocoaPods veya Carthage aracılığıyla yapılır. Kurulumdan sonra, modülün içe aktarılması ve uygulama giriş noktasında (AppDelegate veya SwiftUI App) logger'ların yapılandırılması gerekir.
// Package.swift veya Xcode SPM aracılığıyla
// https://github.com/CocoaLumberjack/CocoaLumberjack.git
// AppDelegate.swift — minimum yapılandırma
import UIKit
import CocoaLumberjack
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(
application: UIApplication,
didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
DDLog.add(DDOSLogger(sharedInstance))
DDLogInfo("Logging configured successfully")
return true
}
}
Swift sarmalayıcı — CocoaLumberjack, DDLogDebug, DDLogInfo, DDLogWarn, DDLogError, DDLogVerbose makrolarıyla ayrı bir CocoaLumberjackSwift modülü sağlar. Bu makrolar, her mesaja otomatik olarak dosya adı, satır numarası ve işlev adı ekleyerek bu verilerin manuel olarak belirtilmesi ihtiyacını ortadan kaldırır.
Önemli: Swift Package Manager kullanırken paketi tam sürümle eklediğinizden emin olun. En son kararlı sürüm 3.8.5, minimum iOS 12.0 veya macOS 10.13 gerektirir. iOS 11 ve altı projeler için 3.7.4 sürümünü kullanın.
DDFileLogger, CocoaLumberjack'in ana bileşenlerinden biridir ve otomatik döndürme ile dosya sistemine güvenilir log yazma sağlar. Üretim uygulamalarında, dosya loglama genellikle hata ayıklamada tekrarlanamayan sorunlar hakkında tek bilgi kaynağıdır.
rollingFrequency — yeni bir log dosyası oluşturma sıklığı (saniye cinsinden). 86400 (24 saat) değeri her gün yeni bir log dosyası oluşturur. maximumNumberOfLogFiles — diskteki maksimum dosya sayısı. logFileManager — dosya yaşam döngüsünü kontrol eden yönetici: oluşturma, arşivleme, eski dosyaları silme.
CocoaLumberjack Documentation, 2024'e göre, üretim için tipik yapılandırma: rollingFrequency = 86400, maximumNumberOfLogFiles = 7 (bir haftalık log), maximumFileSize = 10 MB (ek boyut sınırı). Bu yapılandırma diskte en fazla 70 MB yer kaplar ve tanı senaryolarının %99'unu kapsar.
doNotReuseLogFiles — mevcut dosyaların üzerine yazılmasını önleyen bir bayrak. true olarak ayarlandığında, her yeni dosya adında benzersiz bir zaman damgası alır. logFileManager, DDLogFileManagerDefault.compressLogFiles aracılığıyla eski dosyaların otomatik sıkıştırılmasını destekler — N günden eski dosyalar yerden tasarruf etmek için ZIP'e arşivlenir.
DDFileLogger.logFileManager.sortedLogFilePaths, oluşturma tarihine göre sıralanmış tüm log dosyalarının yollarından oluşan bir dizi döndürür. Bu, uygulama içinde yerleşik bir log görüntüleyici uygulanmasına olanak tanır — Xcode'a erişimi olmayan beta test kullanıcıları ve kurumsal dağıtımlar için kullanışlıdır.
Biçimlendiriciler (DDLogFormatter) — bir log mesajının logger'a iletilmeden önce nasıl bir dizeye dönüştürüleceğini tanımlayan bir protokoldür. Yerleşik biçimlendirici DDDispatchQueueLogFormatter, gönderme kuyruğunun adını ekler — bu, çoklu iş parçacıklı işlemlerin izlenmesini basitleştirir.
// Renk ve zamanla özel biçimlendirici
class CustomLogFormatter: NSObject, DDLogFormatter {
private let dateFormatter: DateFormatter = {
let fmt = DateFormatter()
fmt.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS"
return fmt
}()
func format(message logMessage: DDLogMessage) -> String? {
let timestamp = dateFormatter.string(
from: logMessage.timestamp)
let level = logMessage.level.name
let file = (logMessage.file as NSString).lastPathComponent
let line = logMessage.line
return "[\(timestamp)] [\(level)] [\(file):\(line)] \(logMessage.message)"
}
}
// Biçimlendirici uygulaması
let osLogger = DDOSLogger(sharedInstance)
osLogger.logFormatter = CustomLogFormatter()
DDLog.add(osLogger)
Filtreler (DDLogFilter) — logger düzeyinde mesajları filtrelemeye izin veren bir protokoldür. Yerleşik filtre DDLoggingContextSetFilter, yalnızca belirli bir bağlama sahip mesajları geçirir (örneğin, yalnızca ağ logları). Özel bir filtre, mesaj içeriğini, seviyesini, etiketini veya diğer özellikleri analiz edebilir.
Her logger'da biçimlendirici ve filtre kombinasyonu, kurumsal düzeyde esneklik sağlar. Örneğin, DDFileLogger ayrıntılı bir biçimlendirici (zaman damgası, seviye, dosya, işlev ile) ve “yalnızca Error” filtresi kullanabilirken, DDOSLogger kısa bir biçimlendirici ve “tüm seviyeler” filtresi kullanabilir.
OSLog, iOS 10 ve macOS 10.12'de tanıtılan Apple'ın yerleşik loglama sistemidir. OSLog çekirdek düzeyinde çalışır, logları ikili biçimde yapılandırır ve Console.app aracılığıyla yerleşik filtreleme sağlar. CocoaLumberjack, uygulama düzeyinde çalışan üçüncü taraf bir kütüphanedir.
| Parametre | OSLog | CocoaLumberjack |
|---|---|---|
| Performans | 2.500 msg/s | 10.200 msg/s |
| Dosya çıktısı | Hayır (yalnızca sistem logu) | Döndürmeli DDFileLogger |
| Özel biçimler | Sınırlı (biçim dizeleri) | DDLogFormatter aracılığıyla herhangi biri |
| Çoklu logger | Hayır (tek kanal) | Sınırsız sayıda |
| Filtreleme | subsystem + category | DDLogFilter + logLevel |
| Swift uyumluluğu | Logger API (iOS 14+) | CocoaLumberjackSwift |
OSLog ne zaman kullanılır: dosya logları ve özel biçimler gerekmediğinde temel sistem loglaması için. OSLog, Console.app ve Instruments ile entegrasyonun önemli olduğu işletim sistemi düzeyinde loglama için doğru seçimdir.
CocoaLumberjack ne zaman kullanılır: dosya logları, döndürme, birden çok çıktı kanalı, özel biçimlendiriciler ve saniyede 2.500 mesajı aşan performans gerektiren üretim uygulamaları için. CocoaLumberjack ayrıca 3.8.0 sürümünden itibaren Swift Concurrency'yi (async/await) destekler.
Birçok üretim uygulaması her iki yaklaşımı birleştirir: sistem loglaması için OSLog (logger'lardan biri olarak DDOSLogger aracılığıyla) ve döndürme ve cihaz erişimi ile üretim logları için DDFileLogger.
Sıkça Sorulan Sorular
Hayır — tüm log yazma işlemi arka plan kuyruğunda eşzamansız olarak gerçekleştirilir. CocoaLumberjack, her logger için kendi sıralı kuyruğunu kullanır ve yoğun loglama sırasında bile ana iş parçacığı engellemesini ortadan kaldırır.
CocoaLumberjack dosyaları Library/Caches/Logs dizininde saklar. Erişim için, uygulamaya UIDocumentInteractionController ile bir ekran ekleyin veya logları sunucuya göndermek için SFTP/WebSocket kullanın. Kurumsal projelerde, loglar genellikle çökme raporlarıyla birlikte gönderilir.
Evet — 3.8.0 sürümünden itibaren CocoaLumberjack async/await'i destekler. Log yöntemleri, ek sarmalama olmadan eşzamansız bağlamda kullanılabilir. Tüm dahili kuyruklar Task ve Task.detached ile uyumludur.
CocoaLumberjack maksimum performansa (10.000 msg/s) ve mimari esnekliğe (logger, biçimlendirici, filtre) odaklanır. SwiftyBeaver kullanım kolaylığı ve logları görüntülemek için yerleşik bulut platformunu vurgular. Seçim proje gereksinimlerine bağlıdır.
XcodeColors eklentisiyle DDTTYLogger kullanın. Renk, DDLogMessage.flag aracılığıyla yapılandırılır: Error — kırmızı, Warn — sarı, Info — yeşil, Debug — mavi. Xcode 15'ten itibaren renk vurgulama çalışmayabilir — bunun yerine seviye filtrelemeli DDOSLogger 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