Console.app: چیست، عملکردها و نحوه خواندن لاگ در macOS

نویسنده: IT Sectr منتشر شده: 2026-05-29 زمان مطالعه: 8 دقیقه

Console.app یک برنامه داخلی macOS برای مشاهده، فیلتر کردن و تحلیل لاگ‌های سیستم و کاربر است. پیام‌های سیستم ثبت لاگ یکپارچه اپل (os_log) را در زمان واقعی نمایش می‌دهد و به توسعه‌دهنده امکان می‌دهد بدون اتصال به Xcode، کرش‌ها، خطاها و پیام‌های دیباگ را ببیند. به گفته Apple Support، Console.app از فیلتر کردن بر اساس subsystem، category، سطح بحرانیت و فرآیند، همچنین خروجی لاگ به .logarchive برای ارسال به توسعه‌دهنده پشتیبانی می‌کند. این ابزاری ضروری برای عیب‌یابی مشکلات در مک است: فیلترها و جستجوهای ذخیره شده به شما امکان می‌دهند در میان هزاران پیام سیستمی، خطاهای برنامه را سریع پیدا کنید.

نکات اصلی

  • Console.app — نمایشگر داخلی لاگ macOS که با سیستم ثبت لاگ یکپارچه اپل کار می‌کند
  • فیلتر کردن — جستجو بر اساس subsystem، category، سطح (Error, Fault, Debug) و متن پیام با پشتیبانی از عبارات منظم
  • حالت‌ها — Live (جریان زمان واقعی) و Historical (لاگ‌های بایگانی)، تغییر از طریق نوار ابزار
  • خروجی — ذخیره لاگ‌ها در .logarchive، .txt و .json برای ارسال به توسعه‌دهنده یا پیوست به گزارش باگ
  • جستجوهای ذخیره شده — فیلترهای نام‌گذاری شده برای سناریوهای معمول: همه خطاهای برنامه، لاگ‌های شبکه، CrashReporter

Console.app چیست

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

رابط Console.app از سه ناحیه اصلی تشکیل شده است: پنل کناری با فیلترها، جدول پیام‌ها و پنل جزئیات پیام انتخاب شده. پنل کناری شامل بخش‌های Devices (منابع لاگ موجود)، Reports (گزارش‌های سیستمی خرابی) و Saved Searches (جستجوهای ذخیره شده) است.

جدول پیام‌ها فهرست لاگ‌ها را با ستون‌های Time (زمان‌سنج)، Category (دسته)، Level (سطح بحرانیت — نشانگر رنگی)، Process (نام فرآیند)، Message (متن پیام) نمایش می‌دهد. کلیک روی هر پیام پنل جزئیات را باز می‌کند که در آن subsystem، activity identifier، thread ID و متن کامل با قالب‌بندی نشان داده می‌شود.

Console.app پیام‌ها را با رنگ مشخص می‌کند: قرمز برای Fault، زرد برای Error، آبی برای Debug، خاکستری برای Info. پیام‌های Default مشخص نمی‌شوند. این امکان اسکن بصری جریان لاگ و مشاهده فوری رویدادهای بحرانی را فراهم می‌کند.

swift
// لاگ‌هایی که در 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

فیلتر کردن — عملکرد اصلی Console.app است که جریان هزاران پیام در ثانیه را به یک فهرست خوانا تبدیل می‌کند. قسمت جستجو در بالا از شرایط AND پشتیبانی می‌کند: چند کلمه با فاصله جدا می‌شوند و فقط پیام‌های حاوی همه کلمات نمایش داده می‌شوند. به عنوان مثال، myapp error همه لاگ‌های برنامه myapp با سطح Error را نشان می‌دهد.

فیلتر Subsystem در پنل کناری به شما امکان می‌دهد یک یا چند subsystem را انتخاب کنید. این سریع‌ترین راه برای جداسازی لاگ‌های یک برنامه خاص از پیام‌های سیستمی است. فیلتر Category پس از انتخاب subsystem در دسترس است — همه دسته‌های استفاده شده توسط برنامه انتخاب شده را نشان می‌دهد. فیلتر Level پیام‌ها را بر اساس سطح بحرانیت محدود می‌کند: می‌توان فقط خطاها یا فقط پیام‌های دیباگ را نشان داد.

نوع فیلترمثالنتیجه
متنcrash paymentپیام‌های حاوی crash و payment
Subsystemcom.example.myappفقط لاگ‌های برنامه مشخص شده
LevelError + Faultفقط خطاها و خرابی‌های بحرانی
Categorynetworkپیام‌های دارای دسته network
زمان1 ساعت گذشتهفقط پیام‌های بازه انتخاب شده

عبارات منظم در جستجو

قسمت جستجوی Console.app از regex از طریق ساختار REGEX:pattern پشتیبانی می‌کند. مثال: REGEX:error.*tim(e|out) همه پیام‌های حاوی «error» و کلمه‌ای که با «tim» شروع و به «e» یا «out» ختم می‌شود را پیدا می‌کند. Regex فقط در قسمت جستجو کار می‌کند، نه در فیلترهای subsystem یا category.

حالت‌های Live و Historical

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 روی مک باز کنید — لاگ‌ها از دستگاه راه دور هستند، اما فیلترها و جستجو مانند لاگ‌های محلی کار می‌کنند.

swift
// خروجی لاگ‌های دستگاه 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 برنامه خود برای حذف لاگ‌های سیستمی که ممکن است حاوی اطلاعات محرمانه فرآیندهای دیگر باشند استفاده کنید.

مثال‌های عملی دیباگ از طریق Console.app

تشخیص کرش بدون Xcode: اگر برنامه هنگام راه‌اندازی خارج از Xcode کرش کرد، Console.app یک پیام Fault از فرآیند نشان می‌دهد. در پنل کناری Reports → Crash Reports را پیدا کنید — گزارش‌های کامل خرابی با امضا و پشته در آنجا نمایش داده می‌شوند. از فیلتر subsystem برای برنامه خود استفاده کنید و سطح Error+Fault را تنظیم کنید تا همه رویدادهای بحرانی قبل از کرش را ببینید.

تحلیل عملکرد از طریق Console.app

Console.app به شما امکان می‌دهد تأخیرهای برنامه را بر اساس زمان‌سنج‌ها ردیابی کنید. اگر بین دو پیام مرتبط (مثلاً «درخواست ارسال شد» و «پاسخ دریافت شد») زمان بیشتری از حد انتظار گذشته باشد — این نشانه مشکل عملکرد است. فیلتر subsystem برنامه خود با سطح Default همه رویدادهای کلیدی را با دقت میلی‌ثانیه نشان می‌دهد.

جستجوی نشت حافظه: هنگام نشت حافظه، سیستم از طریق os_log یک اخطار memory با دسته memory و سطح Error ارسال می‌کند. در Console.app بر اساس کلمه memory فیلتر کنید و subsystem خود را انتخاب کنید. اگر اخطار هر ۵–۱۰ ثانیه تکرار شود — برنامه به طور فعال حافظه مصرف می‌کند. علاوه بر این می‌توان لاگ‌های Debug را برای ردیابی تخصیص‌ها فعال کرد.

دیباگ درخواست‌های شبکه: اگر برنامه شما از os_log برای رویدادهای شبکه استفاده می‌کند، Console.app همه درخواست‌ها و پاسخ‌ها را با زمان‌بندی نشان می‌دهد. فیلتر category=network نویز را کاهش می‌دهد. اگر زمان بین درخواست و پاسخ بیش از حد انتظار است، به دنبال پیام‌های level=Error بگردید — آنها به تایم‌اوت یا خطاهای DNS اشاره می‌کنند.

swift
// ساختار برای تجزیه لاگ‌های 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 روی مک کجاست؟

Console.app در پوشه /Applications/Utilities/ قرار دارد. می‌توان آن را از طریق Spotlight (⌘Space → Console) یا از طریق Finder → برنامه‌ها → Utilities → کنسول باز کرد. آیکون برنامه — یک حباب گفتگوی stylized با چرخ دنده است.

چرا Console.app به جای مقادیر <private> نشان می‌دهد؟

os_log رشته‌ها و اشیاء را به طور پیش‌فرض به عنوان private پنهان می‌کند. Console.app آنها را در حالت production به صورت <private> نمایش می‌دهد. برای دیدن مقادیر واقعی، برنامه را از Xcode اجرا کنید یا یک پروفایل جمع‌آوری با سطح Debug برای subsystem خود فعال کنید.

چگونه لاگ‌های فقط برنامه خودم را فیلتر کنم؟

در پنل کناری Console.app، subsystem خود (com.example.app) را در بخش Devices → دستگاه شما → Processes انتخاب کنید. جایگزین — نام فرآیند را در قسمت جستجو تایپ کنید و Process: YourApp را از لیست کشویی انتخاب کنید.

Console.app لاگ‌ها را چقدر نگه می‌دارد؟

به طور پیش‌فرض macOS لاگ‌ها را در .tracev3 به مدت ۷–۱۴ روز بسته به فضای دیسک موجود نگه می‌دارد. در صورت کمبود فضا، قدیمی‌ترین لاگ‌ها به طور خودکار حذف می‌شوند. مدت نگهداری را می‌توان از طریق sudo log config افزایش داد، اما این برای ماشین‌های production توصیه نمی‌شود.

آیا می‌توان لاگ‌های دستگاه iOS را در Console.app مشاهده کرد؟

بله، دستگاه iOS را از طریق USB به مک وصل کنید، Xcode → Devices → دستگاه را انتخاب کنید → Open Console را باز کنید. Console.app لاگ‌های دستگاه متصل را در زمان واقعی نمایش می‌دهد. برای جمع‌آوری مستقل از log collect در ترمینال با پرچم --device استفاده کنید.

خلاصه

  • Console.app — ابزار داخلی macOS برای مشاهده لاگ‌های unified logging (os_log)، بدون نیاز به Xcode یا نصب اضافی
  • فیلترها — جستجو بر اساس subsystem، category، سطح بحرانیت، متن و regex با شرایط AND برای جداسازی ثبت لاگ یک برنامه خاص
  • حالت‌ها — Live (جریان زمان واقعی با تأخیر ۱–۵ ثانیه) و Historical (بایگانی ۷–۱۴ روز) برای تحلیل مشکلات رخ داده
  • خروجی — .logarchive با فراداده‌های کامل برای ارسال به همکاران، .json برای تحلیل برنامه‌ای، .txt برای مشاهده سریع
  • تشخیص — پیدا کردن کرش‌ها، نشت حافظه و خطاهای شبکه بدون Xcode از طریق فیلتر خطاها و خرابی‌های بحرانی با نشانگر رنگی Fault
  • دستگاه‌های راه دور — مشاهده لاگ‌های دستگاه iOS از طریق Xcode یا خروجی از طریق log collect و باز کردن .logarchive در Console.app روی مک
  • حریم خصوصی — os_log داده‌های <private> را در Console.app در حالت production پنهان می‌کند؛ برای دیباگ از Xcode یا پروفایل جمع‌آوری سطح Debug استفاده کنید

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید