Console.app เป็นแอปพลิเคชันในตัวของ macOS สำหรับดู กรอง และวิเคราะห์บันทึกของระบบและผู้ใช้ โดยแสดงข้อความจากระบบบันทึกแบบรวมศูนย์ของ Apple (os_log) แบบเรียลไทม์ ช่วยให้นักพัฒนาเห็นการขัดข้อง ข้อผิดพลาด และข้อความดีบักโดยไม่ต้องเชื่อมต่อกับ Xcode ตามข้อมูลจาก Apple Support Console.app รองรับการกรองตามระบบย่อย หมวดหมู่ ระดับความสำคัญ และกระบวนการ รวมถึงการส่งออกบันทึกไปยัง .logarchive เพื่อส่งต่อให้นักพัฒนา เป็นเครื่องมือที่ขาดไม่ได้ในการวินิจฉัยปัญหาบน Mac: ตัวกรองและการค้นหาที่บันทึกไว้ช่วยให้ค้นหาข้อผิดพลาดของแอปท่ามกลางข้อความระบบนับพันได้อย่างรวดเร็ว
ประเด็นสำคัญ
Console.app คืออินเทอร์เฟซแบบกราฟิกสำหรับระบบบันทึกแบบรวมศูนย์ของ Apple มันแทนที่แอปพลิเคชัน Console เก่า (ซึ่งเป็นส่วนหนึ่งของ macOS) และให้การเข้าถึงบันทึกของระบบและแอปพลิเคชันทั้งหมดที่เขียนผ่าน API 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 (ข้อความ) การคลิกที่ข้อความใดๆ จะเปิดแผงรายละเอียดที่แสดงระบบย่อย ตัวระบุกิจกรรม 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 จะแสดงบันทึกทั้งหมดของแอป myapp ที่มีระดับ Error
ตัวกรองระบบย่อย ในแถบด้านข้างช่วยให้เลือกหนึ่งระบบย่อยหรือมากกว่า นี่เป็นวิธีที่เร็วที่สุดในการแยกบันทึกของแอปเฉพาะออกจากข้อความระบบ ตัวกรองหมวดหมู่ จะพร้อมใช้งานหลังจากเลือกระบบย่อย — มันจะแสดงหมวดหมู่ทั้งหมดที่แอปที่เลือกใช้ ตัวกรองระดับ จะจำกัดข้อความตามระดับความสำคัญ: สามารถแสดงเฉพาะข้อผิดพลาดหรือเฉพาะข้อความดีบัก
| ประเภทตัวกรอง | ตัวอย่าง | ผลลัพธ์ |
|---|---|---|
| ข้อความ | 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 จะเปิดคลังเก็บนี้และให้คุณค้นหาโดยใช้ตัวกรองใดๆ ก็ได้ ไม่ใช่แค่สตรีมปัจจุบัน ซึ่งจำเป็นอย่างยิ่งสำหรับการวิเคราะห์ปัญหาที่เกิดขึ้นในเวลากลางคืนหรือเมื่อแอปทำงานโดยไม่ได้เชื่อมต่อกับ 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 ไฟล์ประกอบด้วยไม่เพียงข้อความ แต่ยังรวมถึงระบบย่อย หมวดหมู่ ประทับเวลา ID เธรด และเมทาดาทาทั้งหมด ขนาดคลังเก็บเล็กกว่าบันทึกดิบอย่างมากเนื่องจากการบีบอัด .tracev3 ก่อนส่ง ตรวจสอบให้แน่ใจว่าบันทึกไม่มีข้อมูลส่วนตัว: ใช้ตัวกรองตามระบบย่อยของแอปของคุณเพื่อแยกบันทึกของระบบที่อาจมีข้อมูลที่เป็นความลับของกระบวนการอื่น
การวินิจฉัยการขัดข้องโดยไม่ใช้ Xcode: หากแอปพลิเคชันขัดข้องเมื่อเปิดนอก Xcode Console.app จะแสดงข้อความ Fault จากกระบวนการ ค้นหา Reports → Crash Reports ในแถบด้านข้าง — รายงานการขัดข้องแบบเต็มพร้อมลายเซ็นและสแต็กจะแสดงอยู่ที่นั่น ใช้ตัวกรองระบบย่อยสำหรับแอปของคุณและตั้งค่าระดับเป็น Error+Fault เพื่อดูเหตุการณ์สำคัญทั้งหมดก่อนการขัดข้อง
Console.app ช่วยให้คุณติดตามความล่าช้าในแอปโดยใช้ประทับเวลา หากเวลาผ่านไปมากกว่าที่คาดไว้ระหว่างข้อความที่เกี่ยวข้องสองข้อความ (เช่น “ส่งคำขอแล้ว” และ “ได้รับคำตอบแล้ว”) นั่นเป็นสัญญาณของปัญหาประสิทธิภาพ ตัวกรองบนระบบย่อยของแอปของคุณด้วยระดับ 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 (⌘Space → Console) หรือผ่าน Finder → แอปพลิเคชัน → อรรถประโยชน์ → Console ไอคอนของแอปเป็นภาพคำพูดสไตล์ที่มีเฟือง
os_log จะปกปิดสตริงและออบเจกต์เป็น private โดยค่าเริ่มต้น 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 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม