تتناول هذه المقالة عملية التسجيل ، بما في ذلك معايير السجل وإرشادات المستوى والفئات والأغراض والتقديرات التقريبية متعددة الأخطاء.
معايير السجل
يعد تسجيل الدخول إلى Android معقدًا بسبب مزيج المعايير المستخدمة التي يتم دمجها في logcat
. المعايير الرئيسية المستخدمة مفصلة أدناه:
مصدر | أمثلة | دليل مستوى المكدس |
---|---|---|
RFC 5424 syslog معيار سجل النظام) | نواة لينكس والعديد من تطبيقات يونكس | نواة ، نظام شياطين |
android.util.Log | إطار عمل Android + تسجيل التطبيق | إطار عمل Android وتطبيق النظام |
java.util.logging.Level | تسجيل الدخول العام في Java | تطبيق غير نظام |
الشكل 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
لتطوير kernel.
تظهر أوامر مستوى السجل ، من الأقل إلى الأكثر ، في الأشكال الثلاثة أدناه:
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
class باستخدام 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; |
---|
يمكن إزالة التسجيل على أساس كل ملف 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 Runtime (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) المطابق لـ Linux kernel syslog
الذي يتحكم في المخزن المؤقت 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
API. - يستخدم الاختبارات المجهزة.
- إذا طلب أحد التطبيقات في المقدمة مع
READ_LOGS
الوصول إلى سجلات الجهاز ، فإن النظام يطالب المستخدم بالموافقة على طلب الوصول أو رفضه.