Console.app سسٹم اور صارف کے لاگ کو دیکھنے، فلٹر کرنے اور تجزیہ کرنے کے لیے macOS میں ایک بلٹ ان ایپلیکیشن ہے۔ یہ Apple کے یونیفائیڈ لاگنگ سسٹم (os_log) سے ریئل ٹائم میں پیغامات دکھاتا ہے، جس سے ڈویلپر Xcode سے منسلک ہوئے بغیر کریش، خرابیاں اور ڈیبگ پیغامات دیکھ سکتا ہے۔ Apple Support کے مطابق، Console.app سب سسٹم، زمرہ، اہمیت کی سطح اور عمل کے لحاظ سے فلٹرنگ کے ساتھ ساتھ .logarchive میں لاگ ایکسپورٹ کرنے کی بھی حمایت کرتا ہے۔ میک پر مسائل کی تشخیص کے لیے یہ ایک ناگزیر ٹول ہے: فلٹرز اور محفوظ کردہ تلاشیاں آپ کو ہزاروں سسٹم پیغامات میں سے ایپلیکیشن کی خرابیاں جلدی سے تلاش کرنے دیتی ہیں۔
اہم نکات
Console.app Apple کے یونیفائیڈ لاگنگ سسٹم کا ایک گرافیکل انٹرفیس ہے۔ اس نے پرانی Console ایپلیکیشن (macOS کے حصے کے طور پر) کی جگہ لے لی ہے اور os_log، os_trace اور syslog APIs کے ذریعے لکھے گئے تمام سسٹم اور ایپلیکیشن لاگ تک رسائی فراہم کرتا ہے۔ Console.app کسی بھی میک پر /Applications/Utilities/ میں واقع ہے۔
Xcode کے برعکس، جو صرف IDE سے لانچ کردہ ایپلیکیشن کے لاگ دکھاتا ہے، Console.app بیک وقت سسٹم پر تمام عملوں کے لاگ دکھاتا ہے۔ یہ ان مسائل کی تشخیص کی اجازت دیتا ہے جو صرف اس وقت ہوتے ہیں جب ایپلیکیشن Xcode کے باہر یا بیک گراؤنڈ میں لانچ کی جاتی ہے۔ Console.app سسٹم لاگ — kernel، launchd، WindowServer بھی دکھاتا ہے، جو نچلی سطح کے مسائل کی ڈیبگنگ کے لیے مفید ہے۔
Console.app کو اضافی ٹولز کی تنصیب یا انٹرنیٹ کنکشن کی ضرورت نہیں ہے۔ تمام ڈیٹا مقامی طور پر .tracev3 ڈیٹا بیس میں محفوظ ہوتا ہے، اور ایپلیکیشن مکمل طور پر آف لائن کام کرتی ہے۔ کسی دوسرے میک یا iOS ڈیوائس سے لاگ دیکھنے کے لیے، log collect کمانڈ استعمال کریں اور پھر .logarchive کو Console.app میں کھولیں۔
Console.app انٹرفیس تین اہم علاقوں پر مشتمل ہے: فلٹرز کے ساتھ سائڈبار، پیغامات کی میز اور منتخب کردہ پیغام کی تفصیلات کا پینل۔ سائڈبار میں Devices (دستیاب لاگ ذرائع)، Reports (سسٹم کریش رپورٹس) اور Saved Searches (محفوظ کردہ تلاش کے سوالات) کے حصے شامل ہیں۔
پیغامات کی میز کالموں کے ساتھ لاگ کی فہرست دکھاتی ہے: Time (ٹائم سٹیمپ)، Category (زمرہ)، Level (اہمیت کی سطح — رنگ کوڈڈ)، Process (عمل کا نام)، Message (پیغام کا متن)। کسی بھی پیغام پر کلک کرنے سے تفصیلات کا پینل کھلتا ہے جو سب سسٹم، سرگرمی کا شناخت کنندہ، تھریڈ ID اور مکمل فارمیٹ شدہ متن دکھاتا ہے۔
Console.app پیغامات کو رنگ سے نمایاں کرتا ہے: Fault کے لیے سرخ، Error کے لیے پیلا، Debug کے لیے نیلا، Info کے لیے سرمئی۔ ڈیفالٹ پیغامات نمایاں نہیں کیے جاتے۔ یہ آپ کو لاگ سٹریم کو بصری طور پر اسکین کرنے اور فوری طور پر اہم واقعات کو دیکھنے کی اجازت دیتا ہے۔
// 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 ایپلیکیشن کے تمام لاگ دکھاتا ہے۔
سائڈبار میں سب سسٹم فلٹر ایک یا زیادہ سب سسٹم منتخب کرنے کی اجازت دیتا ہے۔ یہ سسٹم پیغامات سے کسی مخصوص ایپلیکیشن کے لاگ کو الگ کرنے کا سب سے تیز طریقہ ہے۔ زمرہ فلٹر سب سسٹم منتخب کرنے کے بعد دستیاب ہوتا ہے — یہ منتخب کردہ ایپلیکیشن کے ذریعے استعمال ہونے والے تمام زمرے دکھاتا ہے۔ سطح فلٹر پیغامات کو اہمیت کی سطح کے مطابق محدود کرتا ہے: صرف خرابیاں یا صرف ڈیبگ پیغامات دکھائے جا سکتے ہیں۔
| فلٹر کی قسم | مثال | نتیجہ |
|---|---|---|
| متن | crash payment | پیغامات جن میں crash اور payment دونوں ہوں |
| Subsystem | com.example.myapp | صرف مخصوص ایپلیکیشن کے لاگ |
| Level | Error + Fault | صرف خرابیاں اور سنگین ناکامیاں |
| Category | network | network زمرے کے پیغامات |
| وقت | گزشتہ 1 گھنٹہ | صرف منتخب کردہ وقفے کے پیغامات |
Console.app کا تلاش کا فیلڈ REGEX:pattern تعمیر کے ذریعے ریگولر ایکسپریشنز کو سپورٹ کرتا ہے۔ مثال: REGEX:error.*tim(e|out) تمام پیغامات ڈھونڈتا ہے جن میں “error” اور ایک لفظ ہو جو “tim” سے شروع ہو اور “e” یا “out” پر ختم ہو۔ ریگولر ایکسپریشنز صرف تلاش کے فیلڈ میں کام کرتے ہیں، سب سسٹم یا زمرہ کے فلٹرز میں نہیں۔
Live ریئل ٹائم موڈ ہے جس میں Console.app کرنل رنگ بفر میں نئے پیغامات ظاہر ہوتے ہی دکھاتا ہے۔ یہ موڈ ڈیفالٹ طور پر فعال ہے اور چلتی ہوئی ایپلیکیشن کی ڈیبگنگ کے لیے موزوں ہے: آپ ایپلیکیشن لانچ کرتے ہیں اور 1 سے 5 سیکنڈ کی تاخیر سے اس کے لاگ دیکھتے ہیں۔ Live بٹن (یا ⌘L) سٹریم کو آن اور آف کرتا ہے۔
Historical آرکائیو دیکھنے کا موڈ ہے۔ Console.app پچھلے 7 سے 14 دنوں (سسٹم میں کنفیگر ایبل) کے تمام پیغامات کو .tracev3 ڈیٹا بیس میں محفوظ کرتا ہے۔ Historical موڈ اس آرکائیو کو کھولتا ہے اور اس میں کسی بھی فلٹر کا استعمال کرتے ہوئے تلاش کرنے کی اجازت دیتا ہے، نہ کہ صرف موجودہ سٹریم میں۔ یہ ان مسائل کے تجزیہ کے لیے ناگزیر ہے جو رات کو پیش آئے یا جب ایپلیکیشن میک سے منسلک ہوئے بغیر چل رہی تھی۔
موڈز کے درمیان سوئچنگ ٹول بار میں Live بٹن کے ذریعے ہوتی ہے۔ جب Live بند ہوتا ہے، Console.app تاریخی ڈیٹا دکھاتا ہے۔ اس موڈ میں آپ کیلنڈر یا ← → بٹن کا استعمال کرتے ہوئے ٹائم لائن پر نیویگیٹ کر سکتے ہیں۔ تاریخی ڈیٹا صرف ان لاگز کے لیے دستیاب ہے جو ڈسک پر محفوظ کیے گئے تھے — وہ پیغامات جو رنگ بفر میں اوور رائٹ ہو گئے تھے آرکائیو میں ظاہر نہیں ہوتے۔
Console.app متعدد فارمیٹس میں فلٹر شدہ لاگ کی ایکسپورٹ کو سپورٹ کرتا ہے۔ File → Export → Save فارمیٹ منتخب کرنے کی اجازت دیتا ہے: .logarchive (Apple کا مقامی فارمیٹ، تمام میٹا ڈیٹا شامل)، .txt (کالموں کے ساتھ سادہ متن) اور .json (فیلڈز کے ساتھ سٹرکچرڈ ڈیٹا)۔ بگ رپورٹ میں منسلک کرنے کے لیے .logarchive استعمال کریں — اسے کسی بھی میک پر Console.app میں کھولا جا سکتا ہے۔
iOS ڈیوائس سے ایکسپورٹ: Xcode (Devices → Open Console) کے ذریعے یا ٹرمینل میں log collect --device --output ./archive.logarchive کمانڈ کے ذریعے۔ نتیجے میں ملنے والے .logarchive کو میک پر 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 ٹکٹ میں منسلک کرنے کے لیے بہترین فارمیٹ ہے۔ فائل میں نہ صرف پیغامات بلکہ سب سسٹم، زمرہ، ٹائم سٹیمپ، تھریڈ IDs اور تمام میٹا ڈیٹا شامل ہوتا ہے۔ .tracev3 کمپریشن کی بدولت آرکائیو کا سائز خام لاگ سے نمایاں طور پر چھوٹا ہوتا ہے۔ بھیجنے سے پہلے یقینی بنائیں کہ لاگ میں کوئی نجی ڈیٹا نہیں ہے: اپنی ایپلیکیشن کے سب سسٹم کے مطابق فلٹر استعمال کریں تاکہ ان سسٹم لاگ کو خارج کیا جا سکے جن میں دوسرے عملوں کی خفیہ معلومات ہو سکتی ہیں۔
Xcode کے بغیر کریش کی تشخیص: اگر کوئی ایپلیکیشن Xcode کے باہر لانچ ہونے پر کریش ہوتی ہے، Console.app عمل سے Fault پیغام دکھائے گا۔ سائڈبار میں Reports → Crash Reports تلاش کریں — وہاں دستخط اور سٹیک کے ساتھ مکمل کریش رپورٹس ظاہر ہوتی ہیں۔ اپنی ایپلیکیشن کے لیے سب سسٹم فلٹر استعمال کریں اور کریش سے پہلے تمام اہم واقعات دیکھنے کے لیے سطح Error+Fault سیٹ کریں۔
Console.app آپ کو ٹائم سٹیمپ کا استعمال کرتے ہوئے ایپلیکیشن میں تاخیر کو ٹریک کرنے کی اجازت دیتا ہے۔ اگر دو متعلقہ پیغامات (مثلاً، “درخواست بھیج دی گئی” اور “جواب موصول ہوا”) کے درمیان توقع سے زیادہ وقت گزر گیا ہے، تو یہ کارکردگی کے مسئلے کا اشارہ ہے۔ ڈیفالٹ سطح کے ساتھ آپ کی ایپلیکیشن کے سب سسٹم پر ایک فلٹر ملی سیکنڈ کی درستگی کے ساتھ تمام اہم واقعات دکھائے گا۔
میموری لیک تلاش کرنا: جب میموری لیک ہوتی ہے، سسٹم memory زمرہ اور Error سطح کے ساتھ os_log کے ذریعے میموری وارننگ بھیجتا ہے۔ Console.app میں، memory لفظ سے فلٹر کریں اور اپنا سب سسٹم منتخب کریں۔ اگر وارننگ ہر 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 سے ایپلیکیشن لانچ کریں یا اپنے سب سسٹم کے لیے Debug سطح کے ساتھ کلیکشن پروفائل فعال کریں۔
Console.app سائڈبار میں، Devices → آپ کا ڈیوائس → Processes سیکشن میں اپنا سب سسٹم (com.example.app) منتخب کریں۔ متبادل کے طور پر، تلاش کے فیلڈ میں عمل کا نام درج کریں اور ڈراپ ڈاؤن فہرست سے Process: YourApp منتخب کریں۔
ڈیفالٹ طور پر، macOS دستیاب ڈسک کی جگہ کے لحاظ سے .tracev3 میں لاگ 7 سے 14 دن محفوظ کرتا ہے۔ جب جگہ کم ہوتی ہے، سب سے پرانے لاگ خود بخود حذف ہو جاتے ہیں۔ sudo log config کے ذریعے برقرار رکھنے کی مدت بڑھائی جا سکتی ہے، لیکن پروڈکشن مشینوں کے لیے اس کی سفارش نہیں کی جاتی۔
ہاں، iOS ڈیوائس کو USB کے ذریعے میک سے منسلک کریں، Xcode → Devices کھولیں → ڈیوائس منتخب کریں → Open Console۔ Console.app منسلک ڈیوائس سے ریئل ٹائم میں لاگ دکھائے گا۔ آف لائن جمع کرنے کے لیے، ٹرمینل میں --device پرچم کے ساتھ log collect استعمال کریں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں