Console.app হল macOS-এ সিস্টেম এবং ব্যবহারকারীর লগ দেখার, ফিল্টার করার এবং বিশ্লেষণ করার একটি বিল্ট-ইন অ্যাপ্লিকেশন। এটি Apple-এর unified logging সিস্টেম (os_log) থেকে রিয়েল-টাইমে বার্তা প্রদর্শন করে, যা ডেভেলপারকে Xcode-এ সংযুক্ত না হয়েই ক্র্যাশ, ত্রুটি এবং ডিবাগ বার্তা দেখতে দেয়। Apple Support-এর মতে, Console.app subsystem, category, গুরুত্বের স্তর এবং প্রক্রিয়া দ্বারা ফিল্টারিং সমর্থন করে, পাশাপাশি .logarchive-এ লগ এক্সপোর্ট করে ডেভেলপারের সাথে শেয়ার করা যায়। Mac-এ সমস্যা নির্ণয়ের জন্য এটি একটি অপরিহার্য টুল: ফিল্টার এবং সংরক্ষিত অনুসন্ধান আপনাকে হাজারো সিস্টেম বার্তার মধ্যে দ্রুত অ্যাপ্লিকেশন ত্রুটি খুঁজে পেতে সাহায্য করে।
মূল পয়েন্ট
Console.app হল Apple-এর unified logging সিস্টেমের একটি গ্রাফিক্যাল ইন্টারফেস। এটি পুরানো Console অ্যাপ্লিকেশনকে (macOS-এর অংশ হিসেবে) প্রতিস্থাপন করেছে এবং os_log, os_trace এবং syslog API-এর মাধ্যমে লেখা সমস্ত সিস্টেম এবং অ্যাপ্লিকেশন লগে অ্যাক্সেস প্রদান করে। Console.app যেকোনো Mac-এ /Applications/Utilities/-এ অবস্থিত।
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 (বার্তা টেক্সট)। যেকোনো বার্তায় ক্লিক করলে বিবরণ প্যানেল খোলে যা 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 Error স্তর সহ myapp অ্যাপ্লিকেশনের সমস্ত লগ দেখায়।
Subsystem ফিল্টার সাইডবারে এক বা একাধিক subsystem নির্বাচন করতে দেয়। এটি সিস্টেম বার্তা থেকে একটি নির্দিষ্ট অ্যাপ্লিকেশনের লগ আলাদা করার সবচেয়ে দ্রুততম উপায়। Category ফিল্টার subsystem নির্বাচনের পরে উপলব্ধ — এটি নির্বাচিত অ্যাপ্লিকেশন দ্বারা ব্যবহৃত সমস্ত বিভাগ দেখায়। Level ফিল্টার গুরুত্বের স্তর অনুসারে বার্তা সীমাবদ্ধ করে: শুধুমাত্র ত্রুটি বা শুধুমাত্র ডিবাগ বার্তা দেখানো যেতে পারে।
| ফিল্টারের ধরন | উদাহরণ | ফলাফল |
|---|---|---|
| টেক্সট | crash payment | বার্তা যাতে crash এবং payment উভয়ই রয়েছে |
| Subsystem | com.example.myapp | শুধুমাত্র নির্দিষ্ট অ্যাপ্লিকেশনের লগ |
| Level | Error + Fault | শুধুমাত্র ত্রুটি এবং গুরুতর ব্যর্থতা |
| Category | network | network বিভাগের বার্তা |
| সময় | গত 1 ঘন্টা | শুধুমাত্র নির্বাচিত ব্যবধানের বার্তা |
Console.app-এর অনুসন্ধান ফিল্ড REGEX:pattern নির্মাণের মাধ্যমে regex সমর্থন করে। উদাহরণ: REGEX:error.*tim(e|out) “error” এবং “tim” দিয়ে শুরু হওয়া এবং “e” বা “out” দিয়ে শেষ হওয়া শব্দ সম্বলিত সমস্ত বার্তা খুঁজে পায়। Regex শুধুমাত্র অনুসন্ধান ফিল্ডে কাজ করে, subsystem বা category ফিল্টারে নয়।
Live হল রিয়েল-টাইম মোড যেখানে Console.app কার্নেল রিং বাফারে আসার সাথে সাথে নতুন বার্তা দেখায়। এই মোড ডিফল্টরূপে সক্রিয় এবং চলমান অ্যাপ্লিকেশন ডিবাগ করার জন্য উপযুক্ত: আপনি অ্যাপ্লিকেশন চালু করেন এবং 1–5 সেকেন্ড বিলম্বে এর লগ দেখেন। Live বোতাম (বা ⌘L) স্ট্রিম চালু এবং বন্ধ করে।
Historical হল আর্কাইভ দেখার মোড। Console.app গত 7–14 দিনের (সিস্টেমে কনফিগারযোগ্য) সমস্ত বার্তা .tracev3 ডেটাবেসে সংরক্ষণ করে। Historical মোড এই আর্কাইভ খোলে এবং শুধুমাত্র বর্তমান স্ট্রিম নয়, যেকোনো ফিল্টার ব্যবহার করে এতে অনুসন্ধান করতে দেয়। এটি রাতে বা যখন অ্যাপ্লিকেশন Mac-এ সংযুক্ত না হয়ে চলছিল তখন ঘটে যাওয়া সমস্যা বিশ্লেষণের জন্য অপরিহার্য।
মোডের মধ্যে পরিবর্তন টুলবারের Live বোতামের মাধ্যমে হয়। যখন Live বন্ধ থাকে, Console.app ঐতিহাসিক ডেটা দেখায়। এই মোডে আপনি ক্যালেন্ডার বা ← → বোতাম ব্যবহার করে টাইমলাইনে নেভিগেট করতে পারেন। Historical ডেটা শুধুমাত্র সেই লগগুলির জন্য উপলব্ধ যা ডিস্কে সংরক্ষিত ছিল — রিং বাফারে ওভাররাইট করা বার্তাগুলি আর্কাইভে আসে না।
Console.app একাধিক ফরম্যাটে ফিল্টার করা লগ এক্সপোর্ট সমর্থন করে। File → Export → Save ফরম্যাট বেছে নিতে দেয়: .logarchive (Apple-এর native ফরম্যাট, সমস্ত মেটাডেটা অন্তর্ভুক্ত), .txt (কলাম সহ প্লেইন টেক্সট), .json (ফিল্ড সহ স্ট্রাকচার্ড ডেটা)। বাগ রিপোর্টে সংযুক্ত করার জন্য .logarchive ব্যবহার করুন — এটি যেকোনো Mac-এ Console.app-এ খোলা যেতে পারে।
iOS ডিভাইস থেকে এক্সপোর্ট: Xcode (Devices → Open Console) এর মাধ্যমে বা টার্মিনালে log collect --device --output ./archive.logarchive কমান্ডের মাধ্যমে। ফলস্বরূপ .logarchive Mac-এ 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, টাইমস্ট্যাম্প, থ্রেড ID এবং সমস্ত মেটাডেটা অন্তর্ভুক্ত থাকে। .tracev3 কম্প্রেশনের কারণে আর্কাইভের আকার কাঁচা লগের তুলনায় উল্লেখযোগ্যভাবে ছোট হয়। পাঠানোর আগে নিশ্চিত করুন যে লগে কোনো ব্যক্তিগত ডেটা নেই: আপনার অ্যাপ্লিকেশনের subsystem দ্বারা ফিল্টার ব্যবহার করুন যাতে অন্যান্য প্রক্রিয়ার গোপনীয় তথ্য থাকতে পারে এমন সিস্টেম লগ বাদ দেওয়া যায়।
Xcode ছাড়া ক্র্যাশ নির্ণয়: যদি কোনো অ্যাপ্লিকেশন Xcode-এর বাইরে চালু হলে ক্র্যাশ করে, Console.app প্রক্রিয়া থেকে Fault বার্তা দেখাবে। সাইডবারে Reports → Crash Reports খুঁজুন — সেখানে স্বাক্ষর এবং স্ট্যাক সহ সম্পূর্ণ ক্র্যাশ রিপোর্ট প্রদর্শিত হয়। আপনার অ্যাপ্লিকেশনের জন্য subsystem ফিল্টার ব্যবহার করুন এবং ক্র্যাশের আগে সমস্ত গুরুত্বপূর্ণ ইভেন্ট দেখতে স্তর Error+Fault সেট করুন।
Console.app আপনাকে টাইমস্ট্যাম্প ব্যবহার করে অ্যাপ্লিকেশনে বিলম্ব ট্র্যাক করতে দেয়। যদি দুটি সম্পর্কিত বার্তার (যেমন, “অনুরোধ পাঠানো হয়েছে” এবং “প্রতিক্রিয়া প্রাপ্ত হয়েছে”) মধ্যে প্রত্যাশার চেয়ে বেশি সময় চলে যায়, তবে এটি একটি পারফরম্যান্স সমস্যার সংকেত। Default স্তরের সাথে আপনার অ্যাপ্লিকেশনের subsystem-এ একটি ফিল্টার মিলিসেকেন্ড নির্ভুলতার সাথে সমস্ত মূল ইভেন্ট দেখাবে।
মেমরি লিক খোঁজা: যখন মেমরি লিক হয়, সিস্টেম memory বিভাগ এবং Error স্তরের সাথে os_log-এর মাধ্যমে মেমরি সতর্কতা পাঠায়। Console.app-এ, memory শব্দ দিয়ে ফিল্টার করুন এবং আপনার subsystem নির্বাচন করুন। যদি সতর্কতা প্রতি 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 থেকে অ্যাপ্লিকেশন চালু করুন বা আপনার subsystem-এর জন্য Debug স্তরের সাথে একটি সংগ্রহ প্রোফাইল সক্ষম করুন।
Console.app সাইডবারে, Devices → আপনার ডিভাইস → Processes বিভাগে আপনার subsystem (com.example.app) নির্বাচন করুন। বিকল্পভাবে, অনুসন্ধান ফিল্ডে প্রক্রিয়ার নাম লিখুন এবং ড্রপডাউন তালিকা থেকে Process: YourApp নির্বাচন করুন।
ডিফল্টরূপে, macOS উপলব্ধ ডিস্ক স্থানের উপর নির্ভর করে .tracev3-এ লগ 7–14 দিন সংরক্ষণ করে। যখন স্থান কম থাকে, সবচেয়ে পুরানো লগগুলি স্বয়ংক্রিয়ভাবে মুছে ফেলা হয়। sudo log config-এর মাধ্যমে ধারণকাল বাড়ানো যেতে পারে, কিন্তু প্রোডাকশন মেশিনের জন্য এটি সুপারিশ করা হয় না।
হ্যাঁ, USB-এর মাধ্যমে Mac-এর সাথে iOS ডিভাইস সংযুক্ত করুন, Xcode → Devices খুলুন → ডিভাইস নির্বাচন করুন → Open Console। Console.app সংযুক্ত ডিভাইস থেকে রিয়েল-টাইমে লগ প্রদর্শন করবে। অফলাইন সংগ্রহের জন্য, টার্মিনালে --device ফ্ল্যাগ সহ log collect ব্যবহার করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন