Console.app هو تطبيق مدمج في macOS لعرض وتصفية وتحليل سجلات النظام والمستخدم. يعرض الرسائل من نظام التسجيل الموحد لـ Apple (os_log) في الوقت الفعلي، مما يسمح للمطور برؤية الأعطال والأخطاء ورسائل التصحيح دون الاتصال بـ Xcode. وفقًا لدعم Apple، يدعم Console.app التصفية حسب النظام الفرعي والفئة ومستوى الأهمية والعملية، بالإضافة إلى تصدير السجلات إلى .logarchive لمشاركتها مع المطور. إنها أداة لا غنى عنها لتشخيص المشكلات على Mac: تتيح عوامل التصفية والبحث المحفوظ العثور بسرعة على أخطاء التطبيق بين آلاف رسائل النظام.
النقاط الرئيسية
Console.app هو واجهة رسومية لنظام التسجيل الموحد لـ Apple. لقد حل محل تطبيق Console القديم (كجزء من macOS) ويوفر الوصول إلى جميع سجلات النظام والتطبيقات المكتوبة عبر واجهات برمجة تطبيقات os_log وos_trace وsyslog. يوجد Console.app في /Applications/Utilities/ على أي Mac.
على عكس 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 (نص الرسالة). يؤدي النقر على أي رسالة إلى فتح لوحة التفاصيل التي تظهر النظام الفرعي ومعرف النشاط ومعرف مؤشر الترابط والنص الكامل مع التنسيق.
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 يعرض جميع سجلات تطبيق myapp بمستوى Error.
عامل تصفية النظام الفرعي في الشريط الجانبي يسمح بتحديد نظام فرعي واحد أو أكثر. هذه هي أسرع طريقة لعزل سجلات تطبيق معين عن رسائل النظام. عامل تصفية الفئة متاح بعد تحديد نظام فرعي — يعرض جميع الفئات المستخدمة من قبل التطبيق المحدد. عامل تصفية المستوى يقيد الرسائل حسب مستوى الأهمية: يمكن إظهار الأخطاء فقط أو رسائل التصحيح فقط.
| نوع التصفية | مثال | النتيجة |
|---|---|---|
| نص | crash payment | الرسائل التي تحتوي على crash وpayment |
| النظام الفرعي | com.example.myapp | سجلات التطبيق المحدد فقط |
| المستوى | Error + Fault | الأخطاء والأعطال الحرجة فقط |
| الفئة | network | الرسائل ذات الفئة network |
| الوقت | آخر ساعة | الرسائل من الفاصل الزمني المحدد فقط |
يدعم حقل البحث في 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. يفتح الوضع التاريخي هذا الأرشيف ويسمح بالبحث فيه باستخدام أي عوامل تصفية، وليس فقط التدفق الحالي. هذا لا غنى عنه لتحليل المشكلات التي حدثت ليلاً أو عندما كان التطبيق يعمل دون اتصال بـ Mac.
يتم التبديل بين الأوضاع عبر زر Live في شريط الأدوات. عندما يكون Live متوقفًا، يعرض Console.app البيانات التاريخية. في هذا الوضع يمكنك التنقل في الجدول الزمني باستخدام التقويم أو أزرار ← →. البيانات التاريخية متاحة فقط للسجلات التي تم حفظها على القرص — الرسائل التي تم استبدالها في المخزن المؤقت الحلقي لا تظهر في الأرشيف.
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 الناتج في Console.app على Mac — تأتي السجلات من الجهاز البعيد، لكن عوامل التصفية والبحث تعمل بنفس الطريقة كما هو الحال مع السجلات المحلية.
// تصدير سجلات جهاز 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. يحتوي الملف على الرسائل والنظام الفرعي والفئة والطوابع الزمنية ومعرفات مؤشرات الترابط وجميع البيانات الوصفية. حجم الأرشيف أصغر بكثير من السجلات الأولية بفضل ضغط .tracev3. قبل الإرسال، تأكد من أن السجلات لا تحتوي على بيانات خاصة: استخدم عامل تصفية حسب النظام الفرعي لتطبيقك لاستبعاد سجلات النظام التي قد تحتوي على معلومات سرية من عمليات أخرى.
تشخيص الأعطال بدون Xcode: إذا تعطل تطبيق عند تشغيله خارج Xcode، سيعرض Console.app رسالة Fault من العملية. ابحث عن Reports → Crash Reports في الشريط الجانبي — تظهر تقارير الأعطال الكاملة مع التوقيع والمكدس. استخدم عامل تصفية النظام الفرعي لتطبيقك واضبط المستوى على Error+Fault لرؤية جميع الأحداث الحرجة قبل العطل.
يتيح Console.app تتبع التأخيرات في التطبيق باستخدام الطوابع الزمنية. إذا مر وقت أكثر من المتوقع بين رسالتين مرتبطتين (على سبيل المثال، “tم إرسال الطلب” و “tم استلام الرد”)، فهذه إشارة إلى وجود مشكلة في الأداء. سيظهر عامل تصفية على النظام الفرعي لتطبيقك بمستوى Default جميع الأحداث الرئيسية بدقة ملي ثانية.
البحث عن تسرب الذاكرة: عند حدوث تسرب للذاكرة، يرسل النظام تحذيرًا للذاكرة عبر os_log مع فئة memory ومستوى Error. في Console.app، قم بالتصفية حسب كلمة memory واختر النظام الفرعي الخاص بك. إذا تكرر التحذير كل 5 إلى 10 ثوانٍ، فإن التطبيق يستهلك الذاكرة بنشاط. يمكنك أيضًا تمكين سجلات Debug لتتبع التخصيصات.
تصحيح طلبات الشبكة: إذا كان تطبيقك يستخدم os_log لأحداث الشبكة، سيعرض Console.app جميع الطلبات والاستجابات مع التوقيتات. عامل تصفية category=network يقلل الضوضاء. إذا تجاوز الوقت بين الطلب والاستجابة المتوقع، ابحث عن رسائل ذات level=Error — ستشير إلى انتهاء المهلة أو أخطاء DNS.
// هيكل لتحليل سجلات JSON الخاصة بـ Console.app
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 (⌘مسافة → Console) أو عبر Finder → البرامج → الأدوات المساعدة → Console. أيقونة التطبيق هي فقاعة كلام منمقة مع ترس.
os_log يقوم بإخفاء السلاسل والكائنات كخاصة افتراضيًا. يعرضها Console.app كـ <private> في وضع الإنتاج. لرؤية القيم الفعلية، قم بتشغيل التطبيق من Xcode أو قم بتمكين ملف تعريف جمع بمستوى Debug للنظام الفرعي الخاص بك.
في الشريط الجانبي لـ Console.app، حدد النظام الفرعي الخاص بك (com.example.app) في قسم Devices → جهازك → Processes. بدلاً من ذلك، أدخل اسم العملية في حقل البحث واختر Process: YourApp من القائمة المنسدلة.
بشكل افتراضي، يخزن macOS السجلات في .tracev3 لمدة 7 إلى 14 يومًا اعتمادًا على مساحة القرص المتاحة. عندما تكون المساحة منخفضة، يتم حذف أقدم السجلات تلقائيًا. يمكن زيادة فترة الاحتفاظ عبر sudo log config، لكن هذا غير موصى به لأجهزة الإنتاج.
نعم، قم بتوصيل جهاز iOS بجهاز Mac عبر USB، وافتح Xcode → Devices → حدد الجهاز → Open Console. سيعرض Console.app سجلات الجهاز المتصل في الوقت الفعلي. للتجميع دون اتصال، استخدم log collect في الطرفية مع العلم --device.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا