Console.app macOS में सिस्टम और उपयोगकर्ता लॉग को देखने, फ़िल्टर करने और विश्लेषण करने के लिए एक अंतर्निहित एप्लिकेशन है। यह Apple की unified logging प्रणाली (os_log) से रियल-टाइम में संदेश प्रदर्शित करता है, जिससे डेवलपर Xcode से कनेक्ट हुए बिना क्रैश, त्रुटियाँ और डीबग संदेश देख सकता है। Apple Support के अनुसार, Console.app subsystem, category, गंभीरता स्तर और प्रक्रिया द्वारा फ़िल्टरिंग के साथ-साथ .logarchive में लॉग निर्यात करने का समर्थन करता है। यह Mac पर समस्याओं के निदान के लिए एक अपरिहार्य उपकरण है: फ़िल्टर और सहेजी गई खोजें आपको हज़ारों सिस्टम संदेशों के बीच एप्लिकेशन त्रुटियाँ जल्दी से खोजने देती हैं।
मुख्य बिंदु
Console.app Apple की unified logging प्रणाली का एक ग्राफिकल इंटरफ़ेस है। इसने पुराने Console एप्लिकेशन (macOS के भाग के रूप में) को बदल दिया और os_log, os_trace और syslog API के माध्यम से लिखे गए सभी सिस्टम और एप्लिकेशन लॉग तक पहुँच प्रदान करता है। Console.app किसी भी Mac पर /Applications/Utilities/ में स्थित है।
Xcode के विपरीत, जो केवल IDE से लॉन्च किए गए एप्लिकेशन के लॉग दिखाता है, Console.app एक साथ सिस्टम पर सभी प्रक्रियाओं के लॉग प्रदर्शित करता है। यह उन समस्याओं का निदान करने की अनुमति देता है जो केवल तब होती हैं जब एप्लिकेशन Xcode के बाहर या बैकग्राउंड में लॉन्च किया जाता है। Console.app सिस्टम लॉग — kernel, launchd, WindowServer भी दिखाता है, जो निम्न-स्तरीय समस्याओं की डीबगिंग के लिए उपयोगी है।
Console.app को अतिरिक्त टूल स्थापित करने या इंटरनेट कनेक्शन की आवश्यकता नहीं है। सभी डेटा स्थानीय रूप से .tracev3 डेटाबेस में संग्रहीत होता है, और एप्लिकेशन पूरी तरह से ऑफ़लाइन काम करता है। किसी अन्य Mac या iOS डिवाइस से लॉग देखने के लिए, log collect कमांड का उपयोग करें और फिर .logarchive को Console.app में खोलें।
Console.app इंटरफ़ेस तीन मुख्य क्षेत्रों से बना है: फ़िल्टर के साथ साइडबार, संदेश तालिका और चयनित संदेश का विवरण पैनल। साइडबार में Devices (उपलब्ध लॉग स्रोत), Reports (सिस्टम क्रैश रिपोर्ट) और Saved Searches (सहेजी गई खोज क्वेरी) अनुभाग शामिल हैं।
संदेश तालिका कॉलम के साथ लॉग की एक सूची प्रदर्शित करती है: Time (समय टिकट), Category (श्रेणी), Level (गंभीरता स्तर — रंग-कोडित), Process (प्रक्रिया नाम), Message (संदेश पाठ)। किसी भी संदेश पर क्लिक करने से विवरण पैनल खुलता है जो subsystem, activity identifier, thread ID और पूर्ण स्वरूपित पाठ दिखाता है।
Console.app संदेशों को रंग से हाइलाइट करता है: Fault के लिए लाल, Error के लिए पीला, Debug के लिए नीला, Info के लिए ग्रे। Default संदेश हाइलाइट नहीं किए जाते हैं। यह आपको लॉग स्ट्रीम को दृष्टिगत रूप से स्कैन करने और तुरंत महत्वपूर्ण ईवेंट देखने की अनुमति देता है।
// Console.app में दिखाई देने वाले लॉग
import OSLog
let logger = Logger(
subsystem: "com.example.myapp",
category: "network"
)
logger.error("Connection failed: timeout")
logger.debug("Retry attempt 3 of 5")
// ये संदेश Console.app में फ़िल्टर "myapp" के साथ दिखाई देते हैं
फ़िल्टरिंग Console.app की मुख्य विशेषता है, जो प्रति सेकंड हज़ारों संदेशों की धारा को एक पठनीय सूची में बदल देती है। शीर्ष पर खोज फ़ील्ड AND शर्तों का समर्थन करती है: एक स्थान से अलग किए गए कई शब्द केवल वे संदेश दिखाते हैं जिनमें सभी शब्द हों। उदाहरण के लिए, myapp error Error स्तर वाले myapp एप्लिकेशन के सभी लॉग दिखाता है।
Subsystem फ़िल्टर साइडबार में एक या अधिक subsystem चुनने की अनुमति देता है। यह सिस्टम संदेशों से किसी विशिष्ट एप्लिकेशन के लॉग को अलग करने का सबसे तेज़ तरीका है। Category फ़िल्टर subsystem चुनने के बाद उपलब्ध होता है — यह चयनित एप्लिकेशन द्वारा उपयोग की जाने वाली सभी श्रेणियाँ दिखाता है। Level फ़िल्टर गंभीरता स्तर के अनुसार संदेशों को प्रतिबंधित करता है: केवल त्रुटियाँ या केवल डीबग संदेश दिखाए जा सकते हैं।
| फ़िल्टर प्रकार | उदाहरण | परिणाम |
|---|---|---|
| टेक्स्ट | crash payment | संदेश जिनमें crash और payment दोनों हों |
| Subsystem | com.example.myapp | केवल निर्दिष्ट एप्लिकेशन के लॉग |
| Level | Error + Fault | केवल त्रुटियाँ और गंभीर विफलताएँ |
| Category | network | network श्रेणी वाले संदेश |
| समय | पिछला 1 घंटा | केवल चयनित अंतराल के संदेश |
Console.app का खोज फ़ील्ड REGEX:pattern निर्माण के माध्यम से regex का समर्थन करता है। उदाहरण: REGEX:error.*tim(e|out) उन सभी संदेशों को ढूँढता है जिनमें “error” और “tim” से शुरू होने वाला और “e” या “out” पर समाप्त होने वाला शब्द हो। Regex केवल खोज फ़ील्ड में काम करता है, subsystem या category फ़िल्टर में नहीं।
Live रियल-टाइम मोड है जिसमें Console.app कर्नेल रिंग बफ़र में आने पर नए संदेश दिखाता है। यह मोड डिफ़ॉल्ट रूप से सक्रिय है और चल रहे एप्लिकेशन की डीबगिंग के लिए उपयुक्त है: आप एप्लिकेशन लॉन्च करते हैं और 1–5 सेकंड की देरी से इसके लॉग देखते हैं। Live बटन (या ⌘L) स्ट्रीम को चालू और बंद करता है।
Historical संग्रह देखने का मोड है। Console.app पिछले 7–14 दिनों (सिस्टम में कॉन्फ़िगर करने योग्य) से सभी संदेशों को .tracev3 डेटाबेस में संग्रहीत करता है। Historical मोड इस संग्रह को खोलता है और इसमें किसी भी फ़िल्टर का उपयोग करके खोज करने की अनुमति देता है, न कि केवल वर्तमान स्ट्रीम में। यह उन समस्याओं के विश्लेषण के लिए अपरिहार्य है जो रात में हुईं या जब एप्लिकेशन Mac से कनेक्ट हुए बिना चल रहा था।
मोड के बीच स्विचिंग टूलबार में Live बटन के माध्यम से होती है। जब Live बंद होता है, Console.app ऐतिहासिक डेटा दिखाता है। इस मोड में आप कैलेंडर या ← → बटन का उपयोग करके टाइमलाइन पर नेविगेट कर सकते हैं। Historical डेटा केवल उन लॉग के लिए उपलब्ध है जो डिस्क पर सहेजे गए थे — रिंग बफ़र में ओवरराइट किए गए संदेश संग्रह में नहीं आते हैं।
Console.app कई प्रारूपों में फ़िल्टर किए गए लॉग के निर्यात का समर्थन करता है। File → Export → Save प्रारूप चुनने की अनुमति देता है: .logarchive (Apple का मूल प्रारूप, सभी मेटाडेटा शामिल), .txt (कॉलम के साथ सादा पाठ), .json (फ़ील्ड के साथ संरचित डेटा)। बग रिपोर्ट में संलग्न करने के लिए .logarchive का उपयोग करें — इसे किसी भी Mac पर Console.app में खोला जा सकता है।
iOS डिवाइस से निर्यात: Xcode (Devices → Open Console) के माध्यम से या टर्मिनल में log collect --device --output ./archive.logarchive कमांड के माध्यम से। परिणामी .logarchive को Mac पर Console.app में खोलें — लॉग दूरस्थ डिवाइस से आते हैं, लेकिन फ़िल्टर और खोज स्थानीय लॉग के समान ही काम करते हैं।
// टर्मिनल के माध्यम से iOS डिवाइस लॉग निर्यात करना
// log collect --device --output ./ios_crash.logarchive
// log show --subsystem com.example.app --last 1h --output json
// उदाहरण: पिछले एक घंटे के लॉग निर्यात करें
// log show --predicate 'subsystem == "com.example.myapp"' \
// --info --debug --last 1h --output json > logs.json
// Swift में निर्यात किए गए लॉग का विश्लेषण
let jsonData = try Data(contentsOf: URL(fileURLWithPath: "logs.json"))
let decoded = try JSONDecoder()
.decode([LogEntry].self, from: jsonData)
.logarchive किसी सहकर्मी को भेजने या JIRA टिकट से संलग्न करने के लिए इष्टतम प्रारूप है। फ़ाइल में न केवल संदेश बल्कि subsystem, category, टाइमस्टैम्प, थ्रेड ID और सभी मेटाडेटा शामिल हैं। .tracev3 संपीड़न के कारण संग्रह का आकार कच्चे लॉग की तुलना में काफी छोटा होता है। भेजने से पहले सुनिश्चित करें कि लॉग में कोई निजी डेटा नहीं है: अपने एप्लिकेशन के subsystem द्वारा फ़िल्टर का उपयोग करें ताकि सिस्टम लॉग को बाहर किया जा सके जिनमें अन्य प्रक्रियाओं की गोपनीय जानकारी हो सकती है।
Xcode के बिना क्रैश निदान: यदि कोई एप्लिकेशन Xcode के बाहर लॉन्च होने पर क्रैश होता है, Console.app प्रक्रिया से Fault संदेश दिखाएगा। साइडबार में Reports → Crash Reports खोजें — वहाँ हस्ताक्षर और स्टैक के साथ पूर्ण क्रैश रिपोर्ट प्रदर्शित होती हैं। अपने एप्लिकेशन के लिए subsystem फ़िल्टर का उपयोग करें और क्रैश से पहले सभी महत्वपूर्ण ईवेंट देखने के लिए स्तर Error+Fault सेट करें।
Console.app आपको टाइमस्टैम्प का उपयोग करके एप्लिकेशन में देरी को ट्रैक करने की अनुमति देता है। यदि दो संबंधित संदेशों (जैसे, “अनुरोध भेजा गया” और “प्रतिक्रिया प्राप्त हुई”) के बीच अपेक्षा से अधिक समय बीत गया है, तो यह प्रदर्शन समस्या का संकेत है। Default स्तर के साथ आपके एप्लिकेशन के subsystem पर एक फ़िल्टर मिलीसेकंड सटीकता के साथ सभी प्रमुख ईवेंट दिखाएगा।
मेमोरी लीक खोजना: जब मेमोरी लीक होती है, सिस्टम memory श्रेणी और Error स्तर के साथ os_log के माध्यम से मेमोरी चेतावनी भेजता है। Console.app में, memory शब्द से फ़िल्टर करें और अपना subsystem चुनें। यदि चेतावनी हर 5–10 सेकंड में दोहराई जाती है, तो एप्लिकेशन सक्रिय रूप से मेमोरी की खपत कर रहा है। आप आवंटन को ट्रैक करने के लिए Debug लॉग भी सक्षम कर सकते हैं।
नेटवर्क अनुरोधों की डीबगिंग: यदि आपका एप्लिकेशन नेटवर्क ईवेंट के लिए os_log का उपयोग करता है, Console.app समय के साथ सभी अनुरोध और प्रतिक्रियाएँ दिखाएगा। category=network फ़िल्टर शोर कम करता है। यदि अनुरोध और प्रतिक्रिया के बीच का समय अपेक्षा से अधिक है, तो level=Error वाले संदेश देखें — वे टाइमआउट या DNS त्रुटियाँ इंगित करेंगे।
// Console.app JSON लॉग के विश्लेषण के लिए संरचना
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"
}
}
}
अक्सर पूछे जाने वाले प्रश्न
Console.app /Applications/Utilities/ फ़ोल्डर में स्थित है। आप इसे Spotlight (⌘Space → Console) या Finder → एप्लिकेशन → यूटिलिटीज़ → Console के माध्यम से खोल सकते हैं। एप्लिकेशन आइकन एक गियर के साथ एक स्टाइलिश स्पीच बबल है।
os_log डिफ़ॉल्ट रूप से स्ट्रिंग और ऑब्जेक्ट को private के रूप में मास्क करता है। Console.app उन्हें प्रोडक्शन मोड में <private> के रूप में प्रदर्शित करता है। वास्तविक मान देखने के लिए, Xcode से एप्लिकेशन लॉन्च करें या अपने subsystem के लिए Debug स्तर के साथ संग्रह प्रोफ़ाइल सक्षम करें।
Console.app साइडबार में, Devices → आपका डिवाइस → Processes अनुभाग में अपना subsystem (com.example.app) चुनें। वैकल्पिक रूप से, खोज फ़ील्ड में प्रक्रिया नाम दर्ज करें और ड्रॉपडाउन सूची से Process: YourApp चुनें।
डिफ़ॉल्ट रूप से, macOS उपलब्ध डिस्क स्थान के आधार पर .tracev3 में लॉग को 7–14 दिनों तक संग्रहीत करता है। जब स्थान कम होता है, सबसे पुराने लॉग स्वचालित रूप से हटा दिए जाते हैं। sudo log config के माध्यम से अवधारण अवधि बढ़ाई जा सकती है, लेकिन प्रोडक्शन मशीनों के लिए इसकी अनुशंसा नहीं की जाती है।
हाँ, iOS डिवाइस को USB के माध्यम से Mac से कनेक्ट करें, Xcode → Devices खोलें → डिवाइस चुनें → Open Console। Console.app कनेक्टेड डिवाइस से रियल-टाइम में लॉग प्रदर्शित करेगा। ऑफ़लाइन संग्रह के लिए, टर्मिनल में --device फ्लैग के साथ log collect का उपयोग करें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें