إطار عمل تسجيل جافا

إطار تسجيل البيانات في جافا هو حزمة لتسجيل بيانات الحاسوب لمنصة جافا . تتناول هذه المقالة أطر تسجيل البيانات ذات الأغراض العامة.

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

لسوء الحظ، لم تتضمن حزمة تطوير جافا (JDK) خاصية التسجيل في إصدارها الأصلي، لذا بحلول وقت إضافة واجهة برمجة تطبيقات تسجيل جافا (Java Logging API)، كانت العديد من أطر التسجيل الأخرى قد أصبحت شائعة الاستخدام، ولا سيما Apache Commons Logging (المعروف أيضًا باسم Java Commons Logging أو JCL) و Log4j . وقد أدى ذلك إلى مشاكل عند دمج مكتبات خارجية مختلفة (ملفات JAR) تستخدم كل منها إطار تسجيل مختلف. ولحل هذه المشكلة، تم تطوير أطر تسجيل قابلة للتوصيل (أغلفة).

نظرة عامة على الوظائف

عادةً ما يتم تقسيم عملية التسجيل إلى ثلاثة أجزاء رئيسية: المسجل، والمنسق، والملحق (أو المعالج).

  • يتولى المسجل مسؤولية التقاط الرسالة المراد تسجيلها مع بيانات وصفية معينة وتمريرها إلى إطار عمل التسجيل.
  • بعد استلام الرسالة، يقوم الإطار باستدعاء أداة التنسيق مع الرسالة التي تقوم بتنسيقها للإخراج.
  • يقوم الإطار بعد ذلك بتسليم الرسالة المنسقة إلى المُلحق/المعالج المناسب لاتخاذ الإجراء المناسب. قد يشمل ذلك عرضها على شاشة وحدة التحكم، أو كتابتها على القرص، أو إضافتها إلى قاعدة البيانات، أو إنشاء بريد إلكتروني.

تجمع أطر تسجيل الأحداث الأبسط، مثل إطار تسجيل الأحداث في جافا من تطوير Object Guy ، بين المسجل والملحق. هذا يبسط التشغيل الافتراضي، ولكنه أقل قابلية للتخصيص، خاصةً إذا تم نقل المشروع بين بيئات مختلفة.

مسجل البيانات

المُسجِّل هو كائن يسمح للتطبيق بتسجيل الأحداث بغض النظر عن مكان إرسال/تخزين المخرجات. يقوم التطبيق بتسجيل رسالة عن طريق تمرير كائن أو كائن واستثناء مع مستوى خطورة اختياري إلى كائن المُسجِّل تحت اسم/معرّف مُحدد.

اسم

لكل مُسجِّل اسم. عادةً ما يكون الاسم مُهيكلاً هرمياً، حيث تفصل النقاط (.) بين المستويات. من الأساليب الشائعة استخدام اسم الفئة أو الحزمة التي تُجري عملية التسجيل. يدعم كلٌّ من Log4j وواجهة برمجة تطبيقات تسجيل Java تعريف معالجات أعلى في التسلسل الهرمي.

على سبيل المثال، قد يُسمى المُسجِّل " com.sun.some.UsefulClass". ويمكن تعريف المُعالج لأي مما يلي:

  • com
  • com.sun
  • com.sun.some
  • com.sun.some.UsefulClass

طالما وُجد مُعالج مُعرّف في مكان ما ضمن هذه البنية، يُمكن تسجيل الأحداث. على سبيل المثال com.sun.some.UsefulClass، قد يقوم المُعالج بكتابة رسالة مُسجلة في المُسجل com.sun. عادةً ما يوجد مُعالج عام يستقبل ويُعالج الرسائل التي يُنشئها أي مُسجل.

مستوى الخطورة

يتم تسجيل الرسالة عند مستوى معين. يتم نسخ أسماء المستويات الشائعة من Apache Commons Logging (على الرغم من أن واجهة برمجة تطبيقات تسجيل جافا تُعرّف أسماء مستويات مختلفة):

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

يحتفظ نظام التسجيل بمستوى التسجيل الحالي لكل مسجل. ويمكن ضبط مستوى التسجيل ليكون أكثر أو أقل تقييدًا. على سبيل المثال، إذا تم ضبط مستوى التسجيل على "تحذير"، فسيتم تسجيل جميع الرسائل من هذا المستوى أو أعلى منه: خطأ وخطأ فادح.

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

الفلاتر

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

أدوات التنسيق، أو التخطيطات، أو أدوات العرض

المُنسِّق هو كائن يقوم بتنسيق كائن مُعطى. ويتمثل ذلك في الغالب في أخذ الكائن الثنائي وتحويله إلى تمثيل نصي. يُحدد كل إطار عمل تنسيق إخراج افتراضي يمكن تجاوزه عند الرغبة.

الملحقون أو المعالجون

تستمع وحدات الإلحاق للرسائل التي تبلغ أو تتجاوز مستوى خطورة محددًا. تأخذ وحدة الإلحاق الرسالة التي تُمرر إليها وتنشرها بالشكل المناسب. تشمل عمليات معالجة الرسائل ما يلي:

  • شاشة العرض على وحدة التحكم
  • الكتابة إلى ملف أو سجل النظام
  • إضافة إلى جدول قاعدة البيانات
  • التوزيع عبر خدمات مراسلة جافا
  • إرسال عبر البريد الإلكتروني
  • الكتابة إلى مقبس
  • يتم التخلص من البيانات إلى "مخزن البتات" (/dev/null)

مقارنة الميزات

الجدول 1 - الميزات
نطاقيكتبمستويات التسجيل المدعومةالملحقات القياسيةتعليقاتالتكلفة / الترخيص
Log4jإطار عمل التسجيلFATAL ERROR WARN INFO DEBUG TRACEكثير جدًا بحيث لا يمكن حصرها: راجع وثائق الملحقيُستخدم على نطاق واسع في العديد من المشاريع والمنصات. أُعلن عن انتهاء دعم Log4j 1 في عام 2015، وتم استبداله بـ Log4j 2 الذي يوفر واجهة برمجة تطبيقات (API) يمكن استخدامها مع تطبيقات تسجيل أخرى، بالإضافة إلى تطبيق خاص بتلك الواجهة.
رخصة أباتشي، الإصدار 2.0
واجهة برمجة تطبيقات تسجيل جافاإطار عمل التسجيلSEVERE WARNING INFO CONFIG FINE FINER FINESTتحتوي آلة جافا الافتراضية (JVM) من صن على ما يلي: معالج وحدة التحكم، ومعالج الملفات، ومعالج المقابس، ومعالج الذاكرة.يأتي مع برنامج جو روغان
مينيلوجإطار عمل التسجيلERROR WARNING INFO DEBUG TRACEConsoleWriter و FileWriter و LogcatWriter و JdbcWriter و RollingFileWriter و SharedFileWriter و null (يتجاهل جميع إدخالات السجل) [ 1 ]رخصة أباتشي، الإصدار 2.0
Logbackإطار عمل التسجيلERROR WARN INFO DEBUG TRACEكثير جدًا بحيث لا يمكن حصرها: راجع Appender JavaDocطُوِّرَتْ كبديلٍ لـ Log4j، مع العديد من التحسينات. تُستخدم في العديد من المشاريع، عادةً خلف slf4j، على سبيل المثال Akka و Apache Camel و Apache Cocoon و Artifactory و Gradle و Lift Framework و Play Framework و Scalatra و SonarQube و Spring Boot ، ...رخصة LGPL ، الإصدار 2.1
تسجيل Apache Commons (JCL)غلاف تسجيل الأحداثFATAL ERROR WARN INFO DEBUG TRACEيعتمد ذلك على الإطار الأساسييُستخدم على نطاق واسع، وغالبًا ما يُستخدم بالتزامن مع Log4jرخصة أباتشي، الإصدار 2.0
SLF4Jغلاف تسجيل الأحداثERROR WARN INFO DEBUG TRACEيعتمد على الإطار الأساسي، وهو قابل للتخصيص. يوفر واجهات برمجة تطبيقات متوافقة مع حزم تسجيل JCL وJDK وLog4j. كما يمكنه استخدام أي منها لإنشاء المخرجات. ويستخدم Logback افتراضيًا للمخرجات إن كان متاحًا.يستخدم على نطاق واسع في العديد من المشاريع والمنصات، وغالبًا ما يتم استخدام Logback كأداة تنفيذ.رخصة MIT

الاعتبارات

تُعدّ JCL وLog4j من الأدوات الشائعة جدًا نظرًا لقدمها وانتشارها، ولأنها كانت الخيار الوحيد لفترة طويلة. وقد ساهمت مرونة slf4j (التي تستخدم Logback في بنيتها الأساسية) في جعلها خيارًا مفضلًا.

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

يوفر Log4j 2 واجهة برمجة تطبيقات (API) وتنفيذًا. يمكن توجيه واجهة برمجة التطبيقات إلى تطبيقات تسجيل أخرى مماثلة لطريقة عمل SLF4J. على عكس SLF4J، تسجل واجهة برمجة تطبيقات Log4j 2 كائنات الرسائل [ 2 ] بدلاً من السلاسل النصية لمزيد من المرونة، كما تدعم تعابير لامدا في جافا. [ 3 ]

لا يُعدّ JCL إطار عمل لتسجيل الأحداث بالمعنى الحرفي، بل هو مجرد غلاف برمجي له. ولذلك، فهو يتطلب وجود إطار عمل لتسجيل الأحداث ضمن بنيته الأساسية، مع أنه يمكنه استخدام SimpleLogمسجل الأحداث الخاص به افتراضياً.

تُعدّ JCL وSLF4J وواجهة برمجة تطبيقات Log4j 2 مفيدةً عند تطوير مكتبات قابلة لإعادة الاستخدام، والتي تحتاج إلى الكتابة إلى نظام التسجيل الأساسي الذي يستخدمه التطبيق. كما توفر هذه الأدوات مرونةً في البيئات غير المتجانسة حيث من المحتمل أن يتغير إطار عمل التسجيل، مع العلم أنه في معظم الحالات، بمجرد اختيار إطار عمل التسجيل، لا حاجة لتغييره طوال فترة المشروع. تتميز SLF4J وLog4j 2 بحداثتهما، وتعتمدان على الدروس المستفادة من الأطر الأقدم. علاوةً على ذلك، كانت JCL تعاني من مشاكل معروفة في مُحمّلات الفئات عند تحديد مكتبة التسجيل التي يجب تغليفها [ 4 ] ، والتي حلت محل JCL الآن. [ 5 ]

تُوفّر جافا واجهة برمجة تطبيقات تسجيل جافا (Java Logging API). ورغم أن هذه الواجهة منفصلة تقنيًا عن التنفيذ الافتراضي المُضمّن في جافا، إلا أن استبدالها بتنفيذ بديل قد يكون صعبًا، ما يدفع العديد من المطورين إلى الخلط بينها وبين واجهة برمجة تطبيقات تسجيل جافا. يتم ضبط الإعدادات عبر ملفات خارجية فقط، وهو أمر يصعب تغييره أثناء التشغيل (بينما تدعم أطر العمل الأخرى الإعدادات البرمجية). لا يوفر التنفيذ الافتراضي سوى عدد قليل من المعالجات والمُنسِّقات، ما يعني أن معظم المستخدمين سيضطرون إلى كتابة معالجاتهم الخاصة. [ 6 ]

انظر أيضاً

مراجع