Logcat হল একটি Android SDK টুল যা রিয়েল টাইমে সিস্টেম বার্তা এবং অ্যাপ্লিকেশন লগ দেখার জন্য, ADB বা Android Studio-র বিল্ট-ইন কনসোলের মাধ্যমে উপলব্ধ। Android Developers অনুসারে, Logcat সিস্টেমের সমস্ত প্রক্রিয়া থেকে বার্তা সংগ্রহ করে, সেগুলিকে গুরুত্বের স্তর এবং ট্যাগ অনুসারে ফিল্টার করে এবং ডেভেলপারকে ত্রুটি নির্ণয়, কোড কার্যকরীকরণ ট্র্যাক এবং কর্মক্ষমতা বিশ্লেষণ করতে দেয়। Logcat Android অ্যাপ্লিকেশন ডিবাগ করার সময় তথ্যের প্রধান উৎস।
মুখ্য বিষয়
Logcat হল একটি Android সিস্টেম বাফার যেখানে সমস্ত প্রক্রিয়া (Linux কার্নেল, system_server এবং অ্যাপ্লিকেশন সহ) একটি নির্দিষ্ট বিন্যাসে বার্তা লেখে। logcat টুল, যা Android SDK-তে অন্তর্ভুক্ত, এই বাফার পড়ে এবং রিয়েল টাইমে বার্তা প্রদর্শন করে। Android 4.1 (API 16) থেকে শুরু করে, Logcat-এ অ্যাক্সেস সীমাবদ্ধ: অ্যাপ্লিকেশনগুলি কেবল তাদের নিজস্ব লগ পড়তে পারে এবং সিস্টেম লগগুলি ডিবাগ অ্যাক্সেস সহ ADB-এর মাধ্যমে অ্যাক্সেসযোগ্য।
প্রতিটি Logcat বার্তাতে পাঁচটি ক্ষেত্র থাকে: তারিখ এবং সময়, PID (প্রক্রিয়া শনাক্তকারী), TID (থ্রেড শনাক্তকারী), লগ স্তর এবং ট্যাগ। বিন্যাস স্থির এবং সমস্ত Android সংস্করণে একই। এটি IDE-র উপর নির্ভরতা ছাড়াই CI/CD পাইপলাইনে লগ ফিল্টারিংয়ের জন্য grep, awk এবং sed ইউটিলিটি ব্যবহার করার অনুমতি দেয়।
লগগুলি একটি নির্দিষ্ট আকারের রিং বাফারে সংরক্ষিত হয়: main-এর জন্য 256 KB, system-এর জন্য 256 KB এবং events-এর জন্য 256 KB (Android 5+)। বাফার ওভারফ্লো হলে পুরানো বার্তা মুছে ফেলা হয়। ডেভেলপার PROP logcat.size প্রপার্টি বা ডিভাইসের ডেভেলপার অপশনে বাফারের আকার পরিবর্তন করতে পারে।
ছয়টি স্তর লগিং বার্তার গুরুত্ব নির্ধারণ করে। Android অন্যান্য প্ল্যাটফর্মের মতো মানক স্তর ব্যবহার করে কিন্তু Log ক্লাসে নিজস্ব ধ্রুবক নাম সহ। সঠিক স্তর নির্বাচন করা দক্ষতার সাথে লগ ফিল্টার করতে এবং গৌণ বার্তাগুলিতে গুরুত্বপূর্ণ বার্তাগুলিকে ডুবে যাওয়া থেকে রোধ করতে সহায়তা করে।
| স্তর | ধ্রুবক | উদ্দেশ্য | ডিফল্টরূপে দেখানো হয় |
|---|---|---|---|
| VERBOSE | Log.v | সর্বাধিক বিস্তারিত ডিবাগ তথ্য | না |
| DEBUG | Log.d | ডেভেলপারের জন্য ডিবাগ বার্তা | না |
| INFO | Log.i | অ্যাপ্লিকেশন কার্যক্রম সম্পর্কে তথ্যমূলক বার্তা | হ্যাঁ |
| WARN | Log.w | সম্ভাব্য সমস্যা সম্পর্কে সতর্কতা | হ্যাঁ |
| ERROR | Log.e | গুরুতর ত্রুটি এবং ব্যতিক্রম | হ্যাঁ |
| ASSERT | Log.wtf | ত্রুটিগুলি যা নীতিগতভাবে হওয়া উচিত নয় | হ্যাঁ |
ট্যাগ (tag) — 23টি অক্ষর পর্যন্ত একটি স্ট্রিং যা বার্তার উৎস শনাক্ত করে। ট্যাগ হিসাবে ক্লাস বা মডিউলের নাম ব্যবহার করার পরামর্শ দেওয়া হয়: MainActivity, AuthManager, NetworkModule। এটি অ্যাপ্লিকেশনের একটি নির্দিষ্ট উপাদান অনুসারে লগ ফিল্টার করার অনুমতি দেয়। টিমে একরূপতার জন্য, আপনি একটি পৃথক ফাইলে ট্যাগ ধ্রুবক তৈরি করতে পারেন বা Timber লাইব্রেরি ব্যবহার করতে পারেন, যা ক্লাসের নামের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে ট্যাগ সন্নিবেশ করে।
যখন একটি অপরিচালিত ব্যতিক্রম ঘটে, Android স্বয়ংক্রিয়ভাবে Logcat-এ ক্লাস, পদ্ধতি, কোড লাইন এবং কল চেইন নির্দেশ করে সম্পূর্ণ স্ট্যাক ট্রেস লেখে। ক্র্যাশ লগে ব্যতিক্রম প্রকার (NullPointerException, RuntimeException), বার্তা এবং ক্র্যাশ বিন্দু থেকে অ্যাপ্লিকেশনের এন্ট্রি পয়েন্ট পর্যন্ত কল ক্রম থাকে। ব্যবহারকারীদের ডিভাইস থেকে ক্র্যাশ লগ বিশ্লেষণের জন্য Firebase Crashlytics ব্যবহার করা হয়, যা অবফাসকেশন মানচিত্রের (Android-এর জন্য mapping.txt) সাথে স্ট্যাক ট্রেস সিঙ্ক্রোনাইজ করে।
Android Studio View → Tool Windows → Logcat (Alt + 6) এর মাধ্যমে অ্যাক্সেসযোগ্য একটি গ্রাফিক্যাল Logcat ইন্টারফেস সরবরাহ করে। Logcat উইন্ডো রিয়েল টাইমে আপডেট হয়, সংযুক্ত ডিভাইসের সমস্ত বার্তা দেখায় এবং সাধারণ প্রবাহ থেকে পছন্দসই তথ্য আলাদা করার জন্য নমনীয় ফিল্টার কনফিগার করার অনুমতি দেয়।
Log Level ড্রপডাউন ন্যূনতম স্তর অনুসারে বার্তা ফিল্টার করে: কেবল সতর্কতা এবং ত্রুটি দেখতে WARN নির্বাচন করুন, VERBOSE, DEBUG এবং INFO লুকিয়ে। অনুসন্ধান ক্ষেত্র বার্তা টেক্সট বা ট্যাগ দ্বারা অনুসন্ধানের অনুমতি দেয় — regex সমর্থিত, যা প্যাটার্ন অনুসারে বার্তা খুঁজতে সুবিধাজনক।
Saved Filters — Android Studio-তে Logcat-এর একটি শক্তিশালী বৈশিষ্ট্য। আপনি একটি ফিল্টার তৈরি করতে পারেন যা কেবল আপনার অ্যাপ্লিকেশনের ট্যাগ (tag:MyApp) এবং WARN+ স্তর সহ বার্তা দেখায়। ফিল্টারগুলি সেশনের মধ্যে সংরক্ষিত হয় এবং ড্রপডাউন তালিকা থেকে উপলব্ধ থাকে। একাধিক মডিউল বিশিষ্ট প্রকল্পগুলির জন্য, প্রতিটি মডিউলের জন্য একটি পৃথক ফিল্টার তৈরি করুন।
# অ্যাপ্লিকেশন লগ ফিল্টার করার জন্য উদাহরণ এক্সপ্রেশন
tag:"MyApp" level:WARN # শুধুমাত্র MyApp-এর জন্য WARN+
package:"com.mycompany" # প্যাকেজের সব লগ
-tag:"okhttp" # OkHttp লগ বাদ দিন
Logcat লগ Save to File আইকনের মাধ্যমে একটি টেক্সট ফাইলে রপ্তানি করা যেতে পারে। এটি Jira-তে টিকিট সংযুক্ত করতে বা দীর্ঘ সেশন বিশ্লেষণ করতে কার্যকর। রপ্তানি করা লগ যেকোনো টেক্সট এডিটরে খোলা যেতে পারে এবং প্যাটার্ন অনুসন্ধানের জন্য grep প্রয়োগ করা যেতে পারে। ফরম্যাটেড দেখার জন্য, logcat-color ইউটিলিটি ব্যবহার করুন।
ADB logcat — Logcat-এর কনসোল সংস্করণ, যা Android Debug Bridge-এর মাধ্যমে অ্যাক্সেসযোগ্য। এর প্রধান সুবিধা হল CI সার্ভার, অটোমেশন স্ক্রিপ্ট এবং Android Studio ছাড়া ডিভাইসে চালানোর ক্ষমতা। ADB logcat GUI-র মতো একই ফিল্টার সমর্থন করে, কিন্তু কমান্ড লাইন নমনীয়তার সাথে।
adb logcat কমান্ড আর্গুমেন্ট ছাড়া রিয়েল টাইমে সম্পূর্ণ বাফার আউটপুট করে। বন্ধ করতে Ctrl+C ব্যবহার করুন। -c ফ্ল্যাগ রেকর্ডিং শুরুর আগে বাফার পরিষ্কার করে — এটি সুবিধাজনক যখন আপনি বর্তমান পরীক্ষার লগকে পূর্ববর্তী বার্তাগুলি থেকে আলাদা করতে চান। -b ফ্ল্যাগ বাফার প্রকার নির্বাচন করে: main, system, events, crash (Android 12+).
# বাফার পরিষ্কার করুন এবং MyApp ট্যাগ দিয়ে লগ রেকর্ডিং শুরু করুন
adb logcat -c
adb logcat MyApp:D *:S
# লগ ফাইলে সংরক্ষণ করুন
adb logcat -d > logcat_dump.txt
# প্রক্রিয়া PID দ্বারা ফিল্টারিং
adb logcat --pid=12345
ADB-কে Unix ইউটিলিটিগুলির সাথে সংমিশ্রণ সর্বাধিক নমনীয়তা দেয়। উদাহরণস্বরূপ, ফিল্টার "*:S TAG:D" কেবল TAG ট্যাগ সহ DEBUG স্তর এবং তার উপরের বার্তাগুলি দেখায়, বাকি সব লুকিয়ে। কেবল ব্যতিক্রম দেখতে grep -i exception ব্যবহার করুন। ত্রুটির ফ্রিকোয়েন্সি বিশ্লেষণ করতে, ট্যাগ কলামে sort | uniq -c প্রয়োগ করুন।
CI সার্ভারে, Logcat UI পরীক্ষা চলাকালীন ডায়াগনস্টিকস সংগ্রহ করতে ব্যবহৃত হয়। সাধারণ পাইপলাইন: পরীক্ষা চালানোর আগে বাফার পরিষ্কার করা হয়, পরীক্ষা কার্যকর করার পরে লগ ডাম্প বিল্ড আর্টিফ্যাক্ট হিসাবে সংরক্ষিত হয়। যদি একটি পরীক্ষা ব্যর্থ হয়, লগগুলি নির্ধারণ করতে পারে যে ব্যর্থতা ANR, অপরিচালিত ব্যতিক্রম বা নেটওয়ার্ক টাইমআউটের কারণে হয়েছিল কিনা।
android.util.Log ক্লাস — Logcat-এ বার্তা লেখার জন্য বিল্ট-ইন API। Log.v, Log.d, Log.i, Log.w, Log.e এবং Log.wtf একটি ট্যাগ (স্ট্রিং) এবং একটি বার্তা (স্ট্রিং) বা বার্তা + Throwable গ্রহণ করে। বার্তা ফরম্যাট করার জন্য String.format বা Kotlin String templates ব্যবহার করুন — স্ট্রিং কনক্যাটেনেশন এড়িয়ে চলুন, যা heap-এ অপ্রয়োজনীয় অবজেক্ট তৈরি করে।
Timber — Jake Wharton-এর একটি জনপ্রিয় লাইব্রেরি যা বিল্ট-ইন Log API-র ত্রুটিগুলি দূর করে। Timber স্বয়ংক্রিয়ভাবে যে ক্লাসটি লগিং কল করেছে তার নামের উপর ভিত্তি করে ট্যাগ সন্নিবেশ করে এবং প্রতিটি কলে ট্যাগ পাস করার প্রয়োজন হয় না। Timber শর্তসাপেক্ষ লগিংও সমর্থন করে: Release বিল্ডে, Application.onCreate-এ একটি লাইন দ্বারা Timber.v এবং Timber.d কল অক্ষম করা যেতে পারে।
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// বিল্ট-ইন Log API
Log.d("MainActivity", "onCreate called")
// Timber — ক্লাসের নাম দ্বারা স্বয়ংক্রিয় ট্যাগ
Timber.d("onCreate called")
}
private fun loadData() {
try {
val result = fetchFromNetwork()
Timber.i("Data loaded: $result")
} catch (e: IOException) {
Timber.e(e, "Failed to load data")
}
}
}
Release বিল্ডে Logcat বাফারের লোড কমাতে এবং সংবেদনশীল তথ্য ফাঁস রোধ করতে VERBOSE এবং DEBUG লগ অক্ষম করার পরামর্শ দেওয়া হয়। Timber PlantingTree-র মাধ্যমে এই সমস্যার সমাধান করে: Debug ফ্লেভারে DebugTree রোপণ করা হয় (সবকিছু লগ করে), Release-এ — CrashReportingTree (কেবল Crashlytics-এর মাধ্যমে ERROR লগ করে)। বিল্ট-ইন Log API শর্তসাপেক্ষ লগিং সমর্থন করে না — ডেভেলপারকে প্রতিটি কল if (BuildConfig.DEBUG) দিয়ে মোড়াতে হয়।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
পরীক্ষা চালানোর আগে adb logcat -c কমান্ড ব্যবহার করুন। বিকল্পভাবে, Android Studio-তে Logcat উইন্ডোতে Clear Logcat বাটন (আবর্জনা) টিপুন। পরিষ্কার করা অন্যান্য প্রক্রিয়ার সিস্টেম বাফারকে প্রভাবিত করে না, কেবল বর্তমান সংযোগকে প্রভাবিত করে।
বাফার 2 MB-তে বাড়াতে adb logcat -G 2M নির্বাহ করুন। সর্বোচ্চ আকার ডিভাইসের উপর নির্ভর করে: Android 10+ এ 16 MB পর্যন্ত উপলব্ধ। পরিবর্তন ডিভাইস রিবুট না হওয়া পর্যন্ত থাকে। স্থায়ী সেটিংসের জন্য, device tree-তে build.prop ব্যবহার করুন।
সম্ভাব্য কারণ: অ্যাপ্লিকেশন Release মোডে চলছে (Timber.v/d লগ অক্ষম), Logcat ফিল্টার প্রয়োজনীয় স্তর লুকাচ্ছে, অথবা আপনি ভুল ডিভাইসের সাথে সংযুক্ত। এছাড়াও পরীক্ষা করুন যে আপনি Android Studio-তে অ্যাপ্লিকেশনের প্রক্রিয়া নির্বাচন করেছেন, system_process নয়।
FATAL EXCEPTION সহ লাইন খুঁজুন, যার নিচে সম্পূর্ণ স্ট্যাক ট্রেস থাকে। প্রথম লাইনে ব্যতিক্রম প্রকার এবং বার্তা থাকে, পরবর্তী লাইনে ফাইল এবং কোড লাইন সহ কল চেইন থাকে। সমস্ত লগের মধ্যে দ্রুত অনুসন্ধানের জন্য grep "FATAL EXCEPTION" ব্যবহার করুন।
ANR (Application Not Responding) — একটি পরিস্থিতি যেখানে প্রধান থ্রেড (UI থ্রেড) 5 সেকেন্ডের বেশি সময় ধরে ব্লক থাকে। Logcat-এ, ANR ActivityManager ট্যাগ এবং "ANR in ..." টেক্সট সহ একটি বার্তা হিসাবে দেখা যায় যার সাথে সমস্ত থ্রেডের স্ট্যাক ট্রেস সংযুক্ত থাকে। ট্যাগ:ActivityManager level:ERROR ফিল্টার ব্যবহার করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন