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 क्लास है, जो सभी लॉगिंग ऑपरेशनों के लिए फ़ेसाड के रूप में कार्य करता है। डेवलपर DDLog स्टैटिक मेथड्स को कॉल करता है, और फ़ेसाड रजिस्टर्ड लॉगर्स को एसिंक्रोनस रूप से संदेश वितरित करता है। प्रत्येक लॉगर 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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें