Logcat — ما هو، مستويات التسجيل والعمل مع السجلات

المؤلف: IT Sectr نُشر: 2026-05-06 وقت القراءة: 8 دق

Logcat هي أداة من Android SDK لعرض رسائل النظام وسجلات التطبيقات في الوقت الفعلي، متاحة عبر ADB أو وحدة التحكم المدمجة في Android Studio. وفقًا لـ Android Developers، يقوم Logcat بجمع الرسائل من جميع عمليات النظام، وتصفيتها حسب مستويات الأهمية والعلامات، ويسمح للمطور بتشخيص الأخطاء وتتبع تنفيذ الكود وتحليل الأداء. Logcat هو المصدر الرئيسي للمعلومات عند تصحيح أخطاء تطبيقات Android.

الرئيسي

  • Logcat — نافذة وحدة التحكم في Android Studio لعرض سجلات نظام Android في الوقت الفعلي
  • مستويات السجلات — VERBOSE وDEBUG وINFO وWARN وERROR وASSERT — تحدد أهمية الرسالة وعتبة التصفية
  • التصفية حسب العلامات والمستويات والكلمات الرئيسية تسمح بعزل سجلات تطبيق معين عن التدفق العام
  • ADB logcat — أمر طرفية للوصول إلى السجلات بدون Android Studio، عبر USB أو Wi-Fi
  • سجلات الأعطال — الاستثناءات مع تتبع المكدس تصل إلى Logcat تلقائيًا وتحتوي على تشخيص كامل للانهيار

ما هو Logcat في Android

Logcat هو مخزن مؤقت لنظام Android حيث تكتب جميع العمليات (بما في ذلك نواة Linux وsystem_server والتطبيقات) رسائل بتنسيق محدد. أداة logcat المضمنة في Android SDK تقرأ هذا المخزن وتعرض الرسائل في الوقت الفعلي. بدءًا من Android 4.1 (API 16)، أصبح الوصول إلى Logcat مقيدًا: يمكن للتطبيقات قراءة سجلاتها الخاصة فقط، بينما يمكن الوصول إلى سجلات النظام عبر ADB مع وصول التصحيح.

تحتوي كل رسالة Logcat على خمسة حقول: التاريخ والوقت وPID (معرف العملية) وTID (معرف الخيط) ومستوى السجل والعلامة. التنسيق ثابت ومتطابق عبر جميع إصدارات Android. يتيح ذلك استخدام أدوات grep وawk وsed لتصفية السجلات في خطوط CI/CD دون الاعتماد على IDE.

تُخزَّن السجلات في مخزن دائري بحجم ثابت: 256 كيلوبايت لـ main و256 كيلوبايت لـ system و256 كيلوبايت لـ events (Android 5+). عند امتلاء المخزن، يتم حذف الرسائل القديمة. يمكن للمطور تغيير حجم المخزن عبر الخاصية PROP logcat.size أو في خيارات المطور للجهاز.

مستويات السجلات والعلامات: هيكل رسالة Logcat

ستة مستويات من التسجيل تحدد أهمية الرسالة. يستخدم Android مستويات قياسية مشابهة للمنصات الأخرى ولكن بأسماء ثوابت خاصة به في الفئة Log. يساعد اختيار المستوى الصحيح في تصفية السجلات بكفاءة وعدم إغراق الرسائل الهامة بالرسائل الثانوية.

المستوىالثابتالغرضيظهر افتراضيًا
VERBOSELog.vمعلومات تصحيح مفصلة للغايةلا
DEBUGLog.dرسائل تصحيح للمطورلا
INFOLog.iرسائل إعلامية حول تشغيل التطبيقنعم
WARNLog.wتحذيرات حول المشاكل المحتملةنعم
ERRORLog.eأخطاء حرجة واستثناءاتنعم
ASSERTLog.wtfأخطاء لا ينبغي أن تحدث أبدًانعم

العلامات: تنظيم الرسائل حسب الوحدات

العلامة (tag) — سلسلة يصل طولها إلى 23 حرفًا تحدد مصدر الرسالة. يُوصى باستخدام اسم الفئة أو الوحدة كعلامة: MainActivity أو AuthManager أو NetworkModule. يتيح ذلك تصفية السجلات حسب مكون معين من التطبيق. للتوحيد في الفريق، يمكنك إنشاء ثوابت للعلامات في ملف منفصل أو استخدام مكتبة Timber التي تقوم بإدراج العلامة تلقائيًا حسب اسم الفئة.

سجلات الأعطال وتتبع مكدس الاستثناءات

عند حدوث استثناء غير معالج، يقوم Android تلقائيًا بكتابة تتبع المكدس الكامل في Logcat مع تحديد الفئة والطريقة وسطر الكود وسلسلة الاستدعاءات. يحتوي سجل العطل على نوع الاستثناء (NullPointerException أو RuntimeException) والرسالة وتسلسل الاستدعاءات من نقطة الانهيار إلى نقطة دخول التطبيق. لتحليل سجلات الأعطال من أجهزة المستخدمين، يُستخدم Firebase Crashlytics الذي يقوم بمزامنة تتبع المكدس مع خريطة التمويه (mapping.txt لنظام Android).

Logcat في Android Studio: الواجهة والمرشحات والبحث

Android Studio يوفر واجهة رسومية لـ Logcat يمكن الوصول إليها من خلال View ← Tool Windows ← Logcat (Alt + 6). يتم تحديث نافذة Logcat في الوقت الفعلي، وتعرض جميع رسائل الجهاز المتصل وتسمح بتكوين مرشحات مرنة لعزل المعلومات المطلوبة من التدفق العام.

التصفية حسب المستوى والعلامة

القائمة المنسدلة Log Level تقوم بتصفية الرسائل حسب الحد الأدنى للمستوى: اختر WARN لرؤية التحذيرات والأخطاء فقط، مع إخفاء VERBOSE وDEBUG وINFO. يسمح حقل البحث بالبحث حسب نص الرسالة أو العلامة — مع دعم التعبيرات العادية، وهو مناسب للبحث عن الرسائل بنمط معين.

المرشحات المحفوظة

Saved Filters — ميزة قوية لـ Logcat في Android Studio. يمكنك إنشاء مرشح يعرض فقط الرسائل ذات علامة تطبيقك (tag:MyApp) والمستوى WARN+. يتم حفظ المرشحات بين الجلسات وتكون متاحة من القائمة المنسدلة. للمشاريع ذات الوحدات المتعددة، أنشئ مرشحًا منفصلًا لكل وحدة.

text
# تعبير مثال لتصفية سجلات التطبيق
tag:"MyApp" level:WARN # فقط WARN+ لتطبيق MyApp
package:"com.mycompany" # جميع سجلات الحزمة
-tag:"okhttp" # استثناء سجلات OkHttp

التصدير والتحليل

يمكن تصدير سجلات Logcat إلى ملف نصي عبر أيقونة Save to File. هذا مفيد لإرفاقها بالتذاكر في Jira أو تحليل الجلسات الطويلة. يمكن فتح السجل المصدر في أي محرر نصوص وتطبيق grep للبحث عن الأنماط. للعرض المنسق، استخدم أداة logcat-color.

ADB logcat: أوامر الطرفية للعمل المتقدم

ADB logcat — إصدار وحدة التحكم من Logcat، يمكن الوصول إليه عبر Android Debug Bridge. ميزته الرئيسية هي إمكانية التشغيل على خوادم CI وفي نصوص الأتمتة وعلى الأجهزة بدون Android Studio. يدعم ADB logcat جميع المرشحات نفسها التي تدعمها الواجهة الرسومية، ولكن مع مرونة سطر الأوامر.

الأوامر الأساسية

الأمر adb logcat بدون وسائط يعرض المخزن المؤقت بالكامل في الوقت الفعلي. استخدم Ctrl+C للإيقاف. العلم -c يمسح المخزن قبل بدء التسجيل — وهذا مناسب عندما تحتاج إلى عزل سجلات الاختبار الحالي عن الرسائل السابقة. العلم -b يحدد نوع المخزن: main أو system أو events أو crash (Android 12+).

bash
# مسح المخزن وبدء تسجيل السجلات بالعلامة MyApp
adb logcat -c
adb logcat MyApp:D *:S

# حفظ السجلات في ملف
adb logcat -d > logcat_dump.txt

# التصفية حسب PID العملية
adb logcat --pid=12345

التصفية باستخدام grep وawk

الجمع بين ADB وأدوات Unix يمنح أقصى مرونة. على سبيل المثال، المرشح "*:S TAG:D" يعرض فقط الرسائل ذات العلامة TAG بمستوى DEBUG وما فوق، مخفيًا جميع الرسائل الأخرى. لعرض الاستثناءات فقط، استخدم grep -i exception. لتحليل تكرار الأخطاء، طبق sort | uniq -c على عمود العلامة.

Logcat في CI/CD

في خوادم CI، يُستخدم Logcat لجمع التشخيصات أثناء تشغيل اختبارات واجهة المستخدم. خط أنابيب نموذجي: مسح المخزن قبل تشغيل الاختبارات، حفظ تفريغ السجلات كقطعة أثرية للبناء بعد تنفيذ الاختبارات. إذا فشل الاختبار، يمكن للسجلات تحديد ما إذا كان الفشل ناتجًا عن ANR أو استثناء غير معالج أو انتهاء مهلة الشبكة.

التسجيل في الكود: Log.d وLog.e وTimber

الفئة android.util.Log — هي API مدمجة لكتابة الرسائل في Logcat. Log.v وLog.d وLog.i وLog.w وLog.e وLog.wtf تقبل علامة (سلسلة) ورسالة (سلسلة) أو رسالة + Throwable. لتنسيق الرسائل، استخدم String.format أو قوالب سلاسل Kotlin — تجنب تسلسل السلاسل الذي ينشئ كائنات غير ضرورية في heap.

مكتبة Timber

Timber — مكتبة شائعة من Jake Wharton تعالج عيوب API Log المدمجة. تقوم Timber بإدراج العلامة تلقائيًا حسب اسم الفئة التي استدعت التسجيل ولا تتطلب تمرير علامة في كل استدعاء. تدعم Timber أيضًا التسجيل الشرطي: في إصدار Release، يمكن تعطيل استدعاءات Timber.v وTimber.d بسطر واحد في Application.onCreate.

kotlin
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // API Log المدمجة
        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

في إصدار Release يُوصى بتعطيل سجلات VERBOSE وDEBUG لتقليل الحمل على مخزن Logcat ومنع تسرب المعلومات الحساسة. يحل Timber هذه المشكلة من خلال PlantingTree: في إصدار Debug يتم زرع DebugTree (يسجل كل شيء)، وفي Release — CrashReportingTree (يسجل ERROR فقط عبر Crashlytics). API Log المدمجة لا تدعم التسجيل الشرطي — يحتاج المطور إلى تغليف كل استدعاء بـ if (BuildConfig.DEBUG).

الأسئلة الشائعة

كيفية مسح مخزن Logcat قبل تشغيل الاختبار

استخدم الأمر adb logcat -c قبل تشغيل الاختبار. بدلاً من ذلك، في Android Studio اضغط على زر Clear Logcat (سلة المهملات) في نافذة Logcat. المسح لا يؤثر على مخازن النظام للعمليات الأخرى، فقط على الاتصال الحالي.

كيفية زيادة حجم مخزن Logcat

نفذ adb logcat -G 2M لزيادة المخزن إلى 2 ميغابايت. الحجم الأقصى يعتمد على الجهاز: على Android 10+ يتوفر حتى 16 ميغابايت. يبقى التغيير حتى إعادة تشغيل الجهاز. للإعداد الدائم، استخدم build.prop في device tree.

لماذا لا يعرض Logcat سجلات التطبيق

الأسباب المحتملة: التطبيق يعمل في وضع Release (سجلات Timber.v/d معطلة)، مرشح Logcat يخفي المستوى المطلوب، أو أنك متصل بجهاز خاطئ. تحقق أيضًا من أنك حددت عملية التطبيق في Android Studio، وليس system_process.

كيفية قراءة سجلات الأعطال من Logcat

ابحث عن السطر الذي يحتوي على FATAL EXCEPTION، ويتبعه تتبع المكدس الكامل. السطر الأول يحتوي على نوع الاستثناء والرسالة، والأسطر التالية تحتوي على سلسلة الاستدعاءات مع الملف وسطر الكود. استخدم grep "FATAL EXCEPTION" للبحث السريع بين جميع السجلات.

ما هو ANR وكيفية اكتشافه في Logcat

ANR (Application Not Responding) — حالة يتم فيها حظر الخيط الرئيسي (UI thread) لأكثر من 5 ثوانٍ. في Logcat، يظهر ANR كرسالة مع العلامة ActivityManager والنص "ANR in ..." مع تتبع مكدس جميع الخيوط المرفق. استخدم المرشح tag:ActivityManager level:ERROR.

الخلاصة

  • Logcat — مخزن نظام Android يمكن الوصول إليه عبر ADB والنافذة المدمجة في Android Studio
  • ستة مستويات من التسجيل (VERBOSE — ASSERT) تحدد أهمية الرسالة وعتبة التصفية
  • العلامات تسمح بتجميع الرسائل حسب وحدات التطبيق للتصفية السريعة
  • ADB logcat مع grep/awk أكثر مرونة من الواجهة الرسومية ومناسب لخطوط CI/CD
  • Timber يبسط التسجيل ويدرج العلامات تلقائيًا ويعطل مستويات Debug في Release
  • سجلات الأعطال مع الاستثناءات وتتبع المكدس تصل إلى Logcat تلقائيًا عند كل انهيار
  • المرشحات المحفوظة في Android Studio تسرع التحليل اليومي للسجلات

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا