الأخشاب هو إطار تسجيل خفيف الوزن مكتوب في Swift. إنه أداء للغاية ويدير جميع العمليات القائمة على قطع الأشجار بعيدًا عن الخيوط الرئيسية ، مما يضمن أن واجهة المستخدم أو أي عمليات أخرى لا تتأثر.
الأخشاب هي أيضا مرنة بجنون. يوفر فئة LogFormat
تتيح لك تحديد كيفية ظهور رسائل السجل ، وتتضمن تنسيقات تاريخ مخصصة ، والمختلف المعلومات المتعلقة بالملف الذي تم تنفيذ رسالة السجل فيه ، مثل اسم الملف والدالة والخط.
يوفر Timber حتى الوسائل لنقل سجلاتك بعيدًا عن وحدة التحكم ، من خلال توفير الأنبوب الخاص بك لتخزين رسائل السجل في مكان آخر كما هو الحال في ملف أو على الخادم الخاص بك.
على عكس عدد من أطر التسجيل المتاحة الأخرى ، يتيح لك Timber تحديد مستويات السجل لأي/جميع ملفاتك. لنفترض ، على سبيل المثال ، أردت تعطيل تسجيل طلبات الشبكة أثناء اختبار ميزة منفصلة ، عن طريق الاتصال بـ Logger.registerMinLevel(.None)
في فئة الشبكات الخاصة بك ، يمكنك تعطيل رسائل السجل من الإخراج.
ببساطة إضافة ما يلي إلى podfile الخاص بك. يرجى العلم أن اسم Cocoapod هو TimberSwift
وليس Timber
.
pod 'TimberSwift'
استنساخ المستودع وأضف جميع الملفات الموجودة في /الأخشاب /الفصول إلى مشروعك.
يوصى بإجراء اختبارات الوحدة قبل دمج الأخشاب في مشروعك. يمكن القيام بذلك عن طريق أداء ما يلي في دليل الجذر الخشبي. يرجى التأكد من تثبيت Bundler ، وإذا لم يتم تشغيل gem install bundler
أولاً.
$ bundle install
$ make test
Logger . registerMinLevel ( . Error ) // Set the log-level for the current file if needed
Logger . debug ( " This will not be logged as the debug log level is < error " )
Logger . error ( " Oh dear... An error occurred: ( some_error ) " )
Logger . info ( " The network request succeeded with status code ( status code ) " )
Logger . warn ( " The network response contains some unexpected data " )
// etc...
من أجل تجاوز تنسيق السجل الافتراضي المستخدم بواسطة Timber ، وهو [Level Date Filename:Line] Message
، يجب عليك أولاً إنشاء LogFormat
الخاص بك وتمريره إلى Logger
العالمي أو الخاص بك.
let logFormat = LogFormat ( template : " [%@ %@ %@:%@] %@ " , attributes : [
LogFormatter . Attributes . Level ,
LogFormatter . Attributes . Date ( format : " HH:mm:ss " ) ,
LogFormatter . Attributes . FileName ( fullPath : false , fileExtension : true ) ,
LogFormatter . Attributes . Line ,
LogFormatter . Attributes . Message
] )
// Attach it to the global Logger
Logger . setFormat ( logFormat )
// Or attach it to your own logger
someLogger . logFormat = logFormat
// Or pass it in when you instantiate your logger
let someLogger = Logger ( minLevel : . All , logFormat : logFormat )
تم توثيق الأخشاب بالكامل ، ويمكن العثور على الوثائق على http://maxkramer.github.io/timber/.
كما هو مذكور في logger+loglevels.swift ، نستخدم بشكل موحد أولويات السجل نفسها مثل Apache's Log4J. كما يلي:
ALL < DEBUG < TRACE < INFO < WARN < ERROR < FATAL < OFF.
لذلك ، يتم تمكين طلب سجل المستوى P في مسجل مع المستوى Q إذا p> = q.
مستوى | وصف |
---|---|
الجميع | جميع المستويات بما في ذلك المستويات المخصصة. |
تصحيح | يعين أحداث إعلامية دقيقة أكثر فائدة لتصحيح الطلب. |
خطأ | يعين أحداث الخطأ التي قد لا تزال تسمح للتطبيق بمواصلة التشغيل. |
مميت | يعين أحداث الخطأ الشديدة جدًا التي من المفترض أن تقود التطبيق إلى الإجهاض. |
معلومات | يعين الرسائل المعلوماتية التي تسلط الضوء على تقدم التطبيق على المستوى الخشن. |
عن | أعلى رتبة ممكنة ويهدف إلى إيقاف قطع الأشجار. |
يتعقب | يعين أحداث إعلامية أدق الحبيبات من التصحيح. |
تحذير | يعين المواقف الضارة المحتملة. |
بصريًا:
المرجع: صفحة الهندسة المعمارية لـ LOG4J.