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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন