فهم التسجيل

تتناول هذه المقالة عملية التسجيل، بما في ذلك معايير السجل وإرشادات المستوى والفئات والأغراض والتقديرات التقريبية للمكدسات المتعددة.

معايير السجل

يعد تسجيل الدخول إلى Android أمرًا معقدًا نظرًا لمزيج المعايير المستخدمة المدمجة في logcat . المعايير الرئيسية المستخدمة مفصلة أدناه:

مصدر أمثلة توجيه مستوى المكدس
RFC 5424 (معيار syslog ) نواة لينكس والعديد من تطبيقات يونكس النواة، شياطين النظام
android.util.Log إطار عمل Android + تسجيل التطبيقات إطار عمل أندرويد وتطبيق النظام
java.util.logging.Level تسجيل الدخول العام في جافا تطبيق غير النظام

الشكل 1: معايير مستوى السجل.

على الرغم من أن كل من هذه المعايير لها مستوى مماثل من البناء، إلا أنها تختلف في التفاصيل. المعادلات التقريبية عبر المعايير هي كما يلي:

مستوى RFC 5424 RFC 5424 الخطورة وصف RFC 5424 android.util.Log java.util.logging.Level
0 طارئ النظام غير صالح للاستخدام Log.e / Log.wtf SEVERE
1 يُحذًِر ويجب اتخاذ الإجراء على الفور Log.e / Log.wtf SEVERE
2 شديد الأهمية الظروف الحرجة Log.e / Log.wtf SEVERE
3 خطأ شروط الخطأ Log.e SEVERE
4 تحذير شروط التحذير Log.w WARNING
5 يلاحظ عادي ولكن مهم Log.w WARNING
6 معلومات رسائل المعلومات Log.i INFO
7 تصحيح رسائل على مستوى التصحيح Log.d CONFIG ، FINE
- - رسائل مطولة Log.v FINER / FINEST

الشكل 2: مستويات تسجيل سجل syslog وAndroid وJava.

إرشادات مستوى السجل

توجد إرشادات موجودة لكل معيار سجل. يتبع مستوى السجل المختار المعيار المناسب المستخدم، مثل استخدام معيار syslog لتطوير النواة.

تظهر أوامر مستوى السجل، من الأقل إلى الأكثر، في الأشكال الثلاثة أدناه:

ERROR يتم الاحتفاظ بهذه السجلات دائمًا.
WARN يتم الاحتفاظ بهذه السجلات دائمًا.
INFO يتم الاحتفاظ بهذه السجلات دائمًا.
DEBUG يتم تجميع هذه السجلات ولكن يتم تجريدها في وقت التشغيل.
VERBOSE لا يتم تجميع هذه السجلات مطلقًا في تطبيق إلا أثناء التطوير.

الشكل 3: android.util.Log

CONFIG مستوى الرسالة لرسائل التكوين الثابتة
FINE مستوى الرسالة توفير معلومات التتبع
FINER يشير إلى رسالة تتبع مفصلة إلى حد ما
FINEST يشير إلى رسالة تتبع مفصلة للغاية
INFO مستوى الرسالة للرسائل الإعلامية
SEVERE مستوى الرسالة يشير إلى فشل خطير
WARNING مستوى الرسالة يشير إلى مشكلة محتملة

الشكل 4: java.util.Logging.Level .

0 طارئ النظام غير صالح للاستخدام
1 يُحذًِر ويجب اتخاذ الإجراء على الفور
2 شديد الأهمية الظروف الحرجة
3 خطأ شروط الخطأ
4 تحذير شروط التحذير
5 يلاحظ حالة طبيعية ولكنها مهمة
6 معلوماتية رسائل إعلامية
7 تصحيح رسائل على مستوى التصحيح

الشكل 5: RFC 5424 - القسم 6.2.1 .

تسجيل التطبيق

يتم إجراء التسجيل الانتقائي باستخدام TAG بواسطة فئة android.util.Log باستخدام Log#isLoggable ، كما هو موضح أدناه:

if (Log.isLoggable("FOO_TAG", Log.VERBOSE)) {
 Log.v("FOO_TAG", "Message for logging.");
}

يمكن ضبط السجلات في وقت التشغيل لتوفير مستوى محدد من التسجيل كما هو موضح أدناه:

adb shell setprop log.tag.FOO_TAG VERBOSE

تتم إعادة تعيين خصائص log.tag.* عند إعادة التشغيل. هناك متغيرات مستمرة تبقى عبر عمليات إعادة التشغيل أيضًا. انظر أدناه:

adb shell setprop persist.log.tag.FOO_TAG VERBOSE

تترك عمليات التحقق Log#isLoggable آثارًا للسجل في رمز التطبيق. علامات DEBUG المنطقية تتجاوز تتبعات السجل باستخدام تحسينات برنامج التحويل البرمجي التي تم تعيينها على false ، كما هو موضح أدناه:

private final static boolean DEBUG = false;

… If (DEBUG) { Log.v("FOO_TAG", "Extra debug logging."); }

يمكن إزالة التسجيل على أساس كل APK عبر مجموعات قواعد ProGuard بواسطة R8 في وقت الترجمة. يزيل المثال التالي كل شيء أسفل تسجيل مستوى INFO لـ android.util.Log :

# This allows proguard to strip isLoggable() blocks containing only <=INFO log
# code from release builds.
-assumenosideeffects class android.util.Log {
  static *** i(...);
  static *** d(...);
  static *** v(...);
  static *** isLoggable(...);
}
-maximumremovedandroidloglevel 4

يعد هذا مفيدًا للتعامل مع أنواع إنشاءات التطبيقات المتعددة (على سبيل المثال، إصدارات التطوير مقابل إصدارات الإصدار) حيث من المتوقع أن تكون التعليمات البرمجية الأساسية هي نفسها، ولكن مستويات السجل المسموح بها مختلفة. يجب وضع سياسة واضحة واتباعها للتطبيقات (خاصة تطبيقات النظام) لتحديد مدى تأثير أنواع البناء وتوقعات الإصدار على مخرجات السجل.

تسجيل النظام في وقت تشغيل Android (ART)

هناك العديد من الفئات المتاحة لتطبيقات وخدمات النظام:

فصل غاية
android.telephony.Rlog تسجيل الراديو
android.util.Log تسجيل التطبيق العام
android.util.EventLog تسجيل الأحداث التشخيصية لمتكامل النظام
android.util.Slog تسجيل إطار النظام الأساسي

الشكل 6: فئات وأغراض سجل النظام المتاحة.

على الرغم من أن android.util.Log و android.util.Slog يستخدمان نفس معايير مستوى السجل، Slog عبارة عن فئة @hide قابلة للاستخدام فقط بواسطة النظام الأساسي. يتم تعيين مستويات EventLog إلى الإدخالات الموجودة في ملف event.logtags في /system/etc/event-log-tags .

التسجيل الأصلي

تسجيل الدخول في C/C++ يتبع معيار syslog مع syslog (2) المتوافق مع syslog نظام Linux kernel الذي يتحكم في المخزن المؤقت printk ، وسجل syslog (3) المتوافق مع مسجل النظام العام. يستخدم Android مكتبة liblog لتسجيل النظام العام.

يوفر liblog أغلفة لمجموعات المدونات الفرعية باستخدام نموذج الماكرو التالي:

[Sublog Buffer ID] LOG [Log Level ID]

RLOGD ، على سبيل المثال، يتوافق مع [Radio log buffer ID] LOG [Debug Level] . أغلفة liblog الرئيسية هي كما يلي:

الطبقة المجمعة وظائف المثال
log_main.h ALOGV ، ALOGW
log_radio.h RLOGD ، RLOGE
log_system.h SLOGI ، SLOGW

الشكل 7: أغلفة liblog .

يتمتع Android بواجهات ذات مستوى أعلى للتسجيل تُفضل على استخدام liblog المباشر، كما هو موضح أدناه:

مكتبة الاستخدام
async_safe المكتبة فقط للتسجيل من بيئات آمنة للإشارة غير المتزامنة
libbase مكتبة التسجيل التي توفر واجهة دفق C++ للتسجيل، على غرار التسجيل بنمط Google (glog). libbase قابل للاستخدام في كلا المشروعين الخارجيين ومتوفر في التطبيقات التي تستخدم libbase_ndk .

الشكل 8: مكتبات السجل ذات المستوى الأعلى.

تقريبيات متعددة المكدس

نظرًا للاختلافات في التفاصيل ومستوى القصد، لا توجد مطابقات واضحة أو دقيقة لمعايير التسجيل المختلفة. على سبيل المثال، مستويات java.util.logging.Level و android.util.Log لسجلات الأخطاء ليست متطابقة 1:1:

java.util.Logging.Level android.util.Log
شديد Log.wtf
شديد Log.e

الشكل 9: مستوى الخطأ في تسجيل Java القياسي مقابل تسجيل Android.

في مثل هذه الحالات، استخدم المعيار الفردي لتحديد المستوى الذي سيتم تطبيقه.

أثناء تطوير النظام باستخدام مكونات متعددة على مستوى المكدس، اتبع الشكل 1 لتحديد المعيار الذي سيتم استخدامه لكل مكون. للحصول على دليل تقريبي لرسائل المستوى، اتبع الشكل 2.

الأمن والخصوصية

لا تقم بتسجيل معلومات التعريف الشخصية (PII). يتضمن ذلك تفاصيل مثل:

  • عناوين البريد الإلكتروني
  • أرقام الهاتف
  • الأسماء

وبالمثل، تعتبر بعض التفاصيل حساسة حتى لو لم تكن محددة للهوية الشخصية بشكل صريح.

على سبيل المثال، على الرغم من أن معلومات المنطقة الزمنية لا تعتبر معلومات شخصية، إلا أنها تعطي إشارة إلى الموقع التقريبي للمستخدم.

يجب التعامل مع سياسة السجل والتفاصيل المقبولة كجزء من مراجعة الأمان والخصوصية قبل الإصدار.

سجلات الجهاز

الوصول إلى جميع سجلات الجهاز، بما في ذلك استخدام android.permission.READ_LOGS مقيد:

  • إذا طلب أحد التطبيقات في الخلفية الوصول إلى جميع سجلات الجهاز، فسيتم رفض الطلب تلقائيًا ما لم يكن التطبيق:
    • يشارك UID النظام.
    • يستخدم عملية نظام أصلية ( UID < APP_UID ).
    • يستخدم DropBoxManager .
    • يصل فقط إلى المخزن المؤقت لسجل الأحداث.
    • يستخدم واجهة برمجة تطبيقات EventLog .
    • يستخدم الاختبارات المجهزة.
  • إذا طلب تطبيق في المقدمة يحتوي على READ_LOGS الوصول إلى سجلات الجهاز، فسيطالب النظام المستخدم بالموافقة على طلب الوصول أو رفضه.