Console.app یک برنامه داخلی macOS برای مشاهده، فیلتر کردن و تحلیل لاگهای سیستم و کاربر است. پیامهای سیستم ثبت لاگ یکپارچه اپل (os_log) را در زمان واقعی نمایش میدهد و به توسعهدهنده امکان میدهد بدون اتصال به Xcode، کرشها، خطاها و پیامهای دیباگ را ببیند. به گفته Apple Support، Console.app از فیلتر کردن بر اساس subsystem، category، سطح بحرانیت و فرآیند، همچنین خروجی لاگ به .logarchive برای ارسال به توسعهدهنده پشتیبانی میکند. این ابزاری ضروری برای عیبیابی مشکلات در مک است: فیلترها و جستجوهای ذخیره شده به شما امکان میدهند در میان هزاران پیام سیستمی، خطاهای برنامه را سریع پیدا کنید.
نکات اصلی
Console.app یک رابط گرافیکی برای سیستم ثبت لاگ یکپارچه اپل است. این برنامه جایگزین Console قدیمی (به عنوان بخشی از macOS) شده و به همه لاگهای سیستم و برنامههای نوشته شده از طریق APIهای os_log، os_trace و syslog دسترسی میدهد. 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 (متن پیام) نمایش میدهد. کلیک روی هر پیام پنل جزئیات را باز میکند که در آن 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 همه لاگهای برنامه myapp با سطح Error را نشان میدهد.
فیلتر Subsystem در پنل کناری به شما امکان میدهد یک یا چند subsystem را انتخاب کنید. این سریعترین راه برای جداسازی لاگهای یک برنامه خاص از پیامهای سیستمی است. فیلتر Category پس از انتخاب subsystem در دسترس است — همه دستههای استفاده شده توسط برنامه انتخاب شده را نشان میدهد. فیلتر Level پیامها را بر اساس سطح بحرانیت محدود میکند: میتوان فقط خطاها یا فقط پیامهای دیباگ را نشان داد.
| نوع فیلتر | مثال | نتیجه |
|---|---|---|
| متن | crash payment | پیامهای حاوی crash و payment |
| Subsystem | com.example.myapp | فقط لاگهای برنامه مشخص شده |
| Level | Error + Fault | فقط خطاها و خرابیهای بحرانی |
| Category | network | پیامهای دارای دسته network |
| زمان | 1 ساعت گذشته | فقط پیامهای بازه انتخاب شده |
قسمت جستجوی Console.app از regex از طریق ساختار REGEX:pattern پشتیبانی میکند. مثال: REGEX:error.*tim(e|out) همه پیامهای حاوی «error» و کلمهای که با «tim» شروع و به «e» یا «out» ختم میشود را پیدا میکند. Regex فقط در قسمت جستجو کار میکند، نه در فیلترهای subsystem یا category.
Live — حالت زمان واقعی، که در آن Console.app پیامهای جدید را به محض ظاهر شدن در بافر حلقوی هسته نمایش میدهد. این حالت به طور پیشفرض فعال است و برای دیباگ برنامه در حال اجرا مناسب است: برنامه را اجرا میکنید و لاگهای آن را با تأخیر ۱–۵ ثانیه میبینید. دکمه Live (یا ⌘L) جریان را روشن و خاموش میکند.
Historical — حالت مشاهده بایگانی. Console.app همه پیامهای ۷–۱۴ روز اخیر (قابل تنظیم در سیستم) را در پایگاه داده .tracev3 ذخیره میکند. حالت Historical این بایگانی را باز میکند و امکان جستجو با هر فیلتری را فراهم میکند، نه فقط جریان فعلی. این برای تحلیل مشکلاتی که در شب یا زمانی که برنامه بدون اتصال به مک کار میکرده ضروری است.
تغییر بین حالتها از طریق دکمه Live در نوار ابزار انجام میشود. وقتی Live خاموش است، Console.app دادههای تاریخی را نشان میدهد. در این حالت میتوان با تقویم یا دکمههای ← → در خط زمانی حرکت کرد. دادههای Historical فقط برای لاگهایی که روی دیسک ذخیره شدهاند در دسترس است — پیامهایی که در بافر حلقوی بازنویسی شدهاند وارد بایگانی نمیشوند.
Console.app از خروجی لاگهای فیلتر شده در چندین قالب پشتیبانی میکند. File → Export → Save قالب را انتخاب میکند: .logarchive (قالب بومی اپل، شامل همه فرادادهها)، .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. فایل نه تنها پیامها، بلکه subsystem، category، timestamps، thread IDs و همه فرادادهها را包含 میکند. حجم بایگانی به لطف فشردهسازی .tracev3 به طور قابل توجهی از لاگهای خام کوچکتر است. قبل از ارسال مطمئن شوید لاگها حاوی دادههای خصوصی نیستند: از فیلتر subsystem برنامه خود برای حذف لاگهای سیستمی که ممکن است حاوی اطلاعات محرمانه فرآیندهای دیگر باشند استفاده کنید.
تشخیص کرش بدون Xcode: اگر برنامه هنگام راهاندازی خارج از Xcode کرش کرد، Console.app یک پیام Fault از فرآیند نشان میدهد. در پنل کناری Reports → Crash Reports را پیدا کنید — گزارشهای کامل خرابی با امضا و پشته در آنجا نمایش داده میشوند. از فیلتر subsystem برای برنامه خود استفاده کنید و سطح Error+Fault را تنظیم کنید تا همه رویدادهای بحرانی قبل از کرش را ببینید.
Console.app به شما امکان میدهد تأخیرهای برنامه را بر اساس زمانسنجها ردیابی کنید. اگر بین دو پیام مرتبط (مثلاً «درخواست ارسال شد» و «پاسخ دریافت شد») زمان بیشتری از حد انتظار گذشته باشد — این نشانه مشکل عملکرد است. فیلتر subsystem برنامه خود با سطح Default همه رویدادهای کلیدی را با دقت میلیثانیه نشان میدهد.
جستجوی نشت حافظه: هنگام نشت حافظه، سیستم از طریق os_log یک اخطار memory با دسته memory و سطح Error ارسال میکند. در Console.app بر اساس کلمه memory فیلتر کنید و subsystem خود را انتخاب کنید. اگر اخطار هر ۵–۱۰ ثانیه تکرار شود — برنامه به طور فعال حافظه مصرف میکند. علاوه بر این میتوان لاگهای 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 (⌘Space → Console) یا از طریق Finder → برنامهها → Utilities → کنسول باز کرد. آیکون برنامه — یک حباب گفتگوی stylized با چرخ دنده است.
os_log رشتهها و اشیاء را به طور پیشفرض به عنوان private پنهان میکند. Console.app آنها را در حالت production به صورت <private> نمایش میدهد. برای دیدن مقادیر واقعی، برنامه را از Xcode اجرا کنید یا یک پروفایل جمعآوری با سطح Debug برای subsystem خود فعال کنید.
در پنل کناری Console.app، subsystem خود (com.example.app) را در بخش Devices → دستگاه شما → Processes انتخاب کنید. جایگزین — نام فرآیند را در قسمت جستجو تایپ کنید و Process: YourApp را از لیست کشویی انتخاب کنید.
به طور پیشفرض macOS لاگها را در .tracev3 به مدت ۷–۱۴ روز بسته به فضای دیسک موجود نگه میدارد. در صورت کمبود فضا، قدیمیترین لاگها به طور خودکار حذف میشوند. مدت نگهداری را میتوان از طریق sudo log config افزایش داد، اما این برای ماشینهای production توصیه نمیشود.
بله، دستگاه iOS را از طریق USB به مک وصل کنید، Xcode → Devices → دستگاه را انتخاب کنید → Open Console را باز کنید. Console.app لاگهای دستگاه متصل را در زمان واقعی نمایش میدهد. برای جمعآوری مستقل از log collect در ترمینال با پرچم --device استفاده کنید.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید