CocoaLumberjack iOS اور macOS کے لیے ایک اعلیٰ کارکردگی والی لاگنگ لائبریری ہے جو لاگرز، فارمیٹرز اور فلٹرز کے ماڈیولر فن تعمیر پر بنائی گئی ہے۔ GitHub، 2024 کے مطابق، یہ لائبریری 500 ملین سے زیادہ صارفین کے مجموعی سامعین والی Apple ایپلیکیشنز میں استعمال ہوتی ہے اور کارکردگی پر نمایاں اثر کے بغیر فی سیکنڈ 10,000 سے زیادہ لاگز کی پروسیسنگ کو سپورٹ کرتی ہے۔ NSLog اور OSLog کے برعکس، CocoaLumberjack بیک گراؤنڈ رائٹنگ کے ساتھ غیر ہم وقت ساز لاگرز کی ایک لچکدار پائپ لائن فراہم کرتا ہے۔
اہم نکات
CocoaLumberjack Apple ماحولیاتی نظام کے لیے ایک اوپن سورس لاگنگ لائبریری ہے جسے 2010 میں Robbie Hanson اور Deusty Designs نے بنایا تھا۔ بنیادی محرک NSLog کی کم کارکردگی تھی — ٹرمینل پر ہم وقت ساز رائٹنگ پیغامات کی کم تعداد کے باوجود UI تھریڈ کو سست کر دیتی تھی۔
لائبریری ملٹی لاگر فن تعمیر پر بنائی گئی ہے: ایک ہی لاگ پیغام کو متعدد لاگرز بیک وقت پروسیس کرتے ہیں۔ ہر لاگر پیغام وصول کرتا ہے، اسے اپنے قوانین کے مطابق فارمیٹ کرتا ہے، اور اسے اپنے چینل — فائل، کنسول، OSLog، ریموٹ سرور یا نیٹ ورک — پر لکھتا ہے۔ تمام لاگرز بیک گراؤنڈ قطار میں غیر ہم وقت ساز طور پر کام کرتے ہیں، UI تھریڈ کو بلاک کیے بغیر۔
Deusty Designs Benchmarks، 2023 کے مطابق، CocoaLumberjack فائل میں لکھتے وقت فی سیکنڈ 10,200 لاگ پیغامات پروسیس کرتا ہے، جبکہ NSLog اسی بوجھ کے تحت زیادہ سے زیادہ 1,200 پیغامات فراہم کرتا ہے۔ 8.5 گنا کا فرق غیر ہم وقت ساز فن تعمیر اور کم سے کم لاکنگ کی وجہ سے ہے۔
لائبریری iOS، macOS، tvOS، watchOS اور Swift Package Manager، CocoaPods اور Carthage کو سپورٹ کرتی ہے۔ موجودہ مستحکم ورژن 3.8.5 (2024) ہے، جو Swift 5.9+ اور Objective-C ARC کے ساتھ مطابقت رکھتا ہے۔
CocoaLumberjack کا مرکزی جزو DDLog کلاس ہے، جو تمام لاگنگ آپریشنز کے لیے facade کے طور پر کام کرتی ہے۔ ڈیویلپر DDLog کے جامد طریقوں کو کال کرتا ہے، اور facade رجسٹرڈ لاگرز کو غیر ہم وقت ساز طور پر پیغامات تقسیم کرتا ہے۔ ہر لاگر log(message:) طریقہ کے ساتھ DDLogger پروٹوکول کو لاگو کرتا ہے، ایک تیار فارمیٹ شدہ پیغام وصول کرتا ہے۔
DDAbstractLogger کسٹم لاگرز بنانے کے لیے بنیادی فعالیت فراہم کرتا ہے: غیر ہم وقت ساز رائٹنگ کے لیے قطار، ایک فارمیٹر اور فلٹرنگ سپورٹ۔ ڈیویلپر کو اپنا لاگر لاگو کرنے کے لیے صرف log(message: DDLogMessage) طریقہ کو اوور رائڈ کرنا ہوتا ہے — مثال کے طور پر، کسٹم API یا WebSocket پر لاگز بھیجنے کے لیے۔
CocoaLumberjack چار بلٹ ان لاگرز کے ساتھ آتا ہے: DDOSLogger — OSLog پر آؤٹ پٹ (NSLog کا جدید متبادل)، DDTTYLogger — رنگ ہائی لائٹنگ کے ساتھ Xcode کنسول پر آؤٹ پٹ (XcodeColors درکار ہے)، DDFileLogger — خودکار گردش کے ساتھ فائل رائٹنگ، DDASLLogger — Apple System Log پر آؤٹ پٹ (iOS 15 سے فرسودہ، DDOSLogger سے تبدیل)۔
import CocoaLumberjack
import CocoaLumberjackSwift
// AppDelegate میں لاگرز سیٹ اپ
func configureLogging() {
// OSLog — سسٹم لاگنگ کے لیے
DDLog.add(DDOSLogger(sharedInstance))
// گردش کے ساتھ فائل لاگر
let fileLogger = DDFileLogger()
fileLogger.rollingFrequency = 86400 // 24 گھنٹے
fileLogger.maximumNumberOfLogFiles = 7
DDLog.add(fileLogger)
// کنسول — صرف ڈیبگ کے لیے
#if DEBUG
DDLog.add(DDTTYLogger(sharedInstance))
#endif
}
ہر لاگر کے لیے لاگ سطح کنفیگریشن ڈیٹا کے بہاؤ کے لچکدار کنٹرول کی اجازت دیتی ہے۔ مثال کے طور پر، DDFileLogger تمام سطحوں (Debug اور اوپر) کو قبول کر سکتا ہے، جبکہ DDOSLogger صرف Warn اور Error کو قبول کرتا ہے۔ یہ ہر لاگر کی logLevel پراپرٹی کے ذریعے لاگو کیا جاتا ہے۔
CocoaLumberjack کی انسٹالیشن Swift Package Manager، CocoaPods یا Carthage کے ذریعے کی جاتی ہے۔ انسٹالیشن کے بعد، ماڈیول کو امپورٹ کرنا اور ایپلیکیشن کے داخلے کے مقام — AppDelegate یا SwiftUI App — پر لاگرز کو کنفیگر کرنا ضروری ہے۔
// Package.swift یا Xcode SPM کے ذریعے
// https://github.com/CocoaLumberjack/CocoaLumberjack.git
// AppDelegate.swift — کم سے کم کنفیگریشن
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 ریپر — CocoaLumberjack DDLogDebug، DDLogInfo، DDLogWarn، DDLogError، DDLogVerbose میکروز کے ساتھ ایک علیحدہ CocoaLumberjackSwift ماڈیول فراہم کرتا ہے۔ یہ میکروز خود بخود ہر پیغام میں فائل کا نام، لائن نمبر اور فنکشن کا نام شامل کرتے ہیں، دستی طور پر ڈیٹا کی وضاحت کیے بغیر ٹریسنگ کو آسان بناتے ہیں۔
اہم: Swift Package Manager استعمال کرتے وقت، یقینی بنائیں کہ پیکیج صحیح ورژن کے ساتھ شامل کیا گیا ہے۔ تازہ ترین مستحکم ورژن 3.8.5 کے لیے کم از کم iOS 12.0 یا macOS 10.13 درکار ہے۔ iOS 11 اور اس سے نیچے کے پروجیکٹس کے لیے، ورژن 3.7.4 استعمال کریں۔
DDFileLogger CocoaLumberjack کے اہم اجزاء میں سے ایک ہے، جو خودکار گردش کے ساتھ فائل سسٹم میں قابل اعتماد لاگ رائٹنگ فراہم کرتا ہے۔ پروڈکشن ایپلیکیشنز میں، فائل لاگنگ اکثر ان مسائل کے بارے میں معلومات کا واحد ذریعہ ہوتی ہے جو ڈیبگنگ میں دوبارہ پیدا نہیں کیے جا سکتے۔
rollingFrequency — نئی لاگ فائل بنانے کی فریکوئنسی (سیکنڈ میں)۔ قدر 86400 (24 گھنٹے) ہر روز ایک نئی لاگ فائل بناتی ہے۔ maximumNumberOfLogFiles — ڈسک پر فائلوں کی زیادہ سے زیادہ تعداد۔ logFileManager — مینیجر جو فائل لائف سائیکل کو کنٹرول کرتا ہے: تخلیق، آرکائیو، پرانی فائلوں کو حذف کرنا۔
CocoaLumberjack Documentation، 2024 کے مطابق، پروڈکشن کے لیے عام کنفیگریشن: rollingFrequency = 86400، maximumNumberOfLogFiles = 7 (لاگ کا ایک ہفتہ)، maximumFileSize = 10 MB (اضافی سائز کی حد)۔ یہ کنفیگریشن ڈسک پر 70 MB سے زیادہ نہیں لیتی اور تشخیصی منظرناموں کے 99% کو کور کرتی ہے۔
doNotReuseLogFiles — ایک فلیگ جو موجودہ فائلوں کو اوور رائٹ ہونے سے روکتا ہے۔ true پر سیٹ ہونے پر، ہر نئی فائل کو اپنے نام میں ایک منفرد ٹائم اسٹیمپ ملتا ہے۔ logFileManager DDLogFileManagerDefault.compressLogFiles کے ذریعے پرانی فائلوں کے خودکار کمپریشن کو سپورٹ کرتا ہے — N دنوں سے پرانی فائلیں جگہ بچانے کے لیے ZIP میں آرکائیو کی جاتی ہیں۔
DDFileLogger.logFileManager.sortedLogFilePaths تخلیق کی تاریخ کے مطابق ترتیب دی گئی تمام لاگ فائلوں کے راستوں کی ایک صف لوٹاتا ہے۔ یہ ایپ کے اندر ایک بلٹ ان لاگ ویور کو لاگو کرنے کی اجازت دیتا ہے — بیٹا ٹیسٹرز اور انٹرپرائز ڈیپلائمنٹس کے لیے مفید جہاں Xcode تک رسائی نہیں ہے۔
فارمیٹرز (DDLogFormatter) — ایک پروٹوکول جو یہ طے کرتا ہے کہ لاگر کو پاس کرنے سے پہلے لاگ پیغام کو سٹرنگ میں کیسے تبدیل کیا جائے۔ بلٹ ان فارمیٹر DDDispatchQueueLogFormatter ڈسپیچ قطار کا نام شامل کرتا ہے — یہ ملٹی تھریڈڈ آپریشنز کی ٹریسنگ کو آسان بناتا ہے۔
// رنگ اور وقت کے ساتھ کسٹم فارمیٹر
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)"
}
}
// فارمیٹر کا اطلاق
let osLogger = DDOSLogger(sharedInstance)
osLogger.logFormatter = CustomLogFormatter()
DDLog.add(osLogger)
فلٹرز (DDLogFilter) — ایک پروٹوکول جو لاگر سطح پر پیغامات کو فلٹر کرنے کی اجازت دیتا ہے۔ بلٹ ان فلٹر DDLoggingContextSetFilter صرف ایک مخصوص سیاق و سباق والے پیغامات کو پاس کرتا ہے (مثال کے طور پر، صرف نیٹ ورک لاگز)۔ ایک کسٹم فلٹر پیغام کے مواد، سطح، ٹیگ یا کسی بھی دوسری خصوصیت کا تجزیہ کر سکتا ہے۔
ہر لاگر پر فارمیٹر اور فلٹر کا امتزاج انٹرپرائز سطح کی لچک فراہم کرتا ہے۔ مثال کے طور پر، DDFileLogger ایک تفصیلی فارمیٹر (ٹائم اسٹیمپ، سطح، فائل، فنکشن کے ساتھ) اور “صرف Error” فلٹر استعمال کر سکتا ہے، جبکہ DDOSLogger ایک مختصر فارمیٹر اور “تمام سطحیں” فلٹر استعمال کرتا ہے۔
OSLog Apple کا بلٹ ان لاگنگ سسٹم ہے جو iOS 10 اور macOS 10.12 میں متعارف کرایا گیا تھا۔ OSLog کرنل سطح پر کام کرتا ہے، لاگز کو بائنری فارمیٹ میں تشکیل دیتا ہے، اور Console.app کے ذریعے بلٹ ان فلٹرنگ فراہم کرتا ہے۔ CocoaLumberjack ایک تھرڈ پارٹی لائبریری ہے جو ایپلیکیشن سطح پر کام کرتی ہے۔
| پیرامیٹر | OSLog | CocoaLumberjack |
|---|---|---|
| کارکردگی | 2,500 msg/s | 10,200 msg/s |
| فائل آؤٹ پٹ | نہیں (صرف سسٹم لاگ) | گردش کے ساتھ DDFileLogger |
| کسٹم فارمیٹس | محدود (فارمیٹ سٹرنگز) | DDLogFormatter کے ذریعے کوئی بھی |
| متعدد لاگرز | نہیں (ایک چینل) | لا محدود تعداد |
| فلٹرنگ | subsystem + category | DDLogFilter + logLevel |
| Swift مطابقت | Logger API (iOS 14+) | CocoaLumberjackSwift |
OSLog کب استعمال کریں: بنیادی سسٹم لاگنگ کے لیے جب فائل لاگز اور کسٹم فارمیٹس کی ضرورت نہ ہو۔ OSLog OS سطح کی لاگنگ کے لیے صحیح انتخاب ہے جہاں Console.app اور Instruments کے ساتھ انضمام اہم ہے۔
CocoaLumberjack کب استعمال کریں: پروڈکشن ایپلیکیشنز کے لیے جنہیں فائل لاگز، گردش، متعدد آؤٹ پٹ چینلز، کسٹم فارمیٹرز اور 2,500 پیغامات فی سیکنڈ سے زیادہ کارکردگی کی ضرورت ہوتی ہے۔ CocoaLumberjack ورژن 3.8.0 سے Swift Concurrency (async/await) کو بھی سپورٹ کرتا ہے۔
بہت سی پروڈکشن ایپلیکیشنز دونوں طریقوں کو یکجا کرتی ہیں: سسٹم لاگنگ کے لیے OSLog (ایک لاگر کے طور پر DDOSLogger کے ذریعے) اور گردش اور ڈیوائس تک رسائی کے ساتھ پروڈکشن لاگز کے لیے DDFileLogger۔
اکثر پوچھے گئے سوالات
نہیں — تمام لاگ رائٹنگ بیک گراؤنڈ قطار میں غیر ہم وقت ساز طور پر کی جاتی ہے۔ CocoaLumberjack ہر لاگر کے لیے اپنی سیریل قطار استعمال کرتا ہے، جو شدید لاگنگ کے باوجود مرکزی تھریڈ کی بلاکنگ کو ختم کرتا ہے۔
CocoaLumberjack فائلوں کو Library/Caches/Logs ڈائریکٹری میں محفوظ کرتا ہے۔ رسائی کے لیے، ایپ میں UIDocumentInteractionController کے ساتھ ایک اسکرین شامل کریں یا سرور کو لاگز بھیجنے کے لیے SFTP/WebSocket استعمال کریں۔ انٹرپرائز پروجیکٹس میں، لاگز اکثر کریش رپورٹس کے ساتھ بھیجے جاتے ہیں۔
ہاں — ورژن 3.8.0 سے CocoaLumberjack async/await کو سپورٹ کرتا ہے۔ لاگ طریقے اضافی ریپنگ کے بغیر غیر ہم وقت ساز سیاق و سباق میں دستیاب ہیں۔ تمام داخلی قطاریں Task اور Task.detached کے ساتھ مطابقت رکھتی ہیں۔
CocoaLumberjack زیادہ سے زیادہ کارکردگی (10,000 msg/s) اور آرکیٹیکچرل لچک (لاگرز، فارمیٹرز، فلٹرز) پر توجہ مرکوز کرتا ہے۔ SwiftyBeaver استعمال میں آسانی اور لاگز دیکھنے کے لیے بلٹ ان کلاؤڈ پلیٹ فارم پر زور دیتا ہے۔ انتخاب پروجیکٹ کی ضروریات پر منحصر ہے۔
XcodeColors پلگ ان کے ساتھ DDTTYLogger استعمال کریں۔ رنگ DDLogMessage.flag کے ذریعے کنفیگر کیا جاتا ہے: Error — سرخ، Warn — پیلا، Info — سبز، Debug — نیلا۔ Xcode 15 سے، رنگین ہائی لائٹنگ کام نہیں کر سکتی — اس کے بجائے سطح فلٹرنگ کے ساتھ DDOSLogger استعمال کریں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں