Logback و Log4j2 هي بعض من أطر تسجيل JAVA الأكثر شهرة. يتم استخدام إطار عمل Logback فقط بالاقتران مع مكتبة SLF4J ، والتي تعد واجهة لأنظمة تسجيل الأحداث. Log4j2 هو الإصدار الثاني المحسّن من Log4 logger ، وهي مكتبة تسجيل منفصلة عن API والتطبيق ، مما يسمح لك باستخدام Log4j 2 API بالاقتران مع تطبيق مسجل آخر.
Spring Music هو تطبيق لاستخدام خدمة قاعدة بيانات Cloud Foundry بالاقتران مع Spring Framework و Spring Boot. تم إنشاؤه لتخزين كائنات المجال نفسها في واحد من مستودعات التخزين المختلفة - كائن متعلق بالعلاقة ، أو مستند المنحى أو موزع (مخزن قيمة المفتاح).

قطعتا الأشجار الأكثر شيوعًا المستخدمة مع Spring / Spring Boot هما Logback و Log4j2. حتى وقت قريب ، كان لدى المطور مزيد من حرية التصرف فيما يتعلق بتنسيق السجلات والملفات نفسها المستخدمة للتسجيل. ومع ذلك ، في العالم الحديث من تنفيذ الحاويات وتوسيع نطاقها ، عادة ما يقدم قطع الأشجار حلولًا للمؤسسات تتطلب مستوى معينًا من التقييس.
إحدى أكبر المشكلات هي أن استثناءات Java تؤدي عادةً إلى تتبع مكدس كبير متعدد الخطوط في السجلات. لهذا السبب ، بدلاً من حدث سجل واحد يشير إلى استثناء أو رسالة خطأ ، لديك أكثر من 100 سجل مختلف ، واحد لكل سطر من تتبع المكدس ، تتخللها أحداث سجل أخرى من خدمات أو مثيلات خدمة أخرى.
توضح هذه المقالة كيفية تكوين تطبيق Spring Boot لطي الاستثناءات في سطر واحد لكل من Logback logger و Log4j2. يسمح لنا ذلك بالنظر في استثناء التسجيل وتتبع المكدس كسجل حدث واحد.
فئات الخطأ والاستثناء في JAVA
استثناءات JAVA التي تم التحقق منها ولم يتم التحقق منهاتطبيق موسيقى الربيع
في هذه المقالة ، للتسجيل المخصص ، يتم استخدام إصدار مخصص من تطبيق
spring-music ، وهو أمر ضروري لتشغيل مسجلي Logback و Log4j2. تحتاج أولاً إلى التأكد من أنه يمكننا إعادة إنشائها من المصدر. يتطلب المشروع Java8 ، وبالتالي فإن الخطوة الأولى هي تثبيت Java8 على مضيف Ubuntu.

ثم نأخذ الكود المصدري للمشروع مع
github وننشئ التجميع باستخدام البرامج النصية المدمجة لنظام بناء Gradle:

طي استثناءات الأسطر المتعددة باستخدام Logback
دعنا ننتقل وننشئ أرشيف jar لمشروع jar من خلال تطبيق Logback logger باستخدام أمر Gradle القياسي:

يعد ملف "build / libs / spring-music.jar" قابلاً للتنفيذ الذاتي ويحتوي على Tomcat مضمن يرتبط بالمضيف المحلي: 8080. يسمى ملف الجرة باستخدام الأمر:

الاتصال بـ
http: // localhost: 8080 في المتصفح سوف يعرض لك صفحة بها قائمة من الألبومات ، وسيتم عرض سطر السجل الذي يبدو كهذا في وحدة التحكم:

يتم تعريف بناء جملة سطر السجل هذا في "
src / main / resources / logback-spring.xml " باستخدام قالب مخصص:

يتم استخراج المتغيرات $ {...} من application.properties وخصائص النظام ، والتي يمكن عرضها على الصفحة على
http: // localhost: 8080 / env . ومع ذلك ، فإن جزء الكود الذي نحتاج إليه يقع مباشرة بعد الرسالة (٪ m).

الكلمة "MULTIEXCEPTION" ليس لها معنى خاص ، إنها مجرد علامة سلسلة فريدة تتيح لنا معرفة أين تنتهي الرسالة (٪ m) ويبدأ الاستثناء. إذا كنت تريد ، يمكنك ترك هذه العلامة.
علاوة على ذلك ، بدلاً من مجرد إدراج عنصر نائب٪ xException من شأنه أن يلقي تتبعًا مكدسًا كبيرًا بأحرف السطر الجديد ، فإننا نقوم بتحويل القيمة باستخدام دالة٪ replace واستبدال جميع أحرف السطر الجديد بالتعبير "\ u2028" ، وهو
عرض محدد لسلسلة أحرف Unicode .
تعني إزالة الأحرف "\ n" من تتبع المكدس أنه سيتم الآن إرسال تتبع المكدس في شكل سطر واحد. لإثبات ذلك ، انتقل إلى
http: // localhost: 8080 / error / throw ، حيث يوجد "
وحدة التحكم في الأخطاء" التي تعمد طرح NullPointerException بالشفرة التالية:

يؤدي هذا إلى إنشاء سطر سجل في وحدة التحكم ، كما هو موضح أدناه:

يمكن أن نرى هنا أن التعبير "u2028" يفصل ما كان بمثابة تغذية سطر في تتبع المكدس. الآن سيتم إرسال رسالة الاستثناء وتتبع المكدس كوحدة.

طي استثناءات متعددة الأسطر باستخدام Log4j2
لتجاوز البرنامج النصي الافتراضي للبناء واستخدام Log4j2 كتطبيق النسخ الاحتياطي لهذا المشروع ، تحتاج إلى استخدام ملف "build-log4j2.gradle".

يعد ملف "build / libs / spring-music.jar" قابلاً للتنفيذ الذاتي ويستخدم Tomcat المدمج ، المرتبط بالمضيف المحلي: 8080. كما في المثال السابق ، يسمى ملف jar باستخدام الأمر:

استدعاء
http: // localhost: 8080 باستخدام متصفح سيعرض صفحة مع قائمة من الألبومات مع إخراج خط السجل إلى وحدة التحكم التي تبدو كما يلي:

يتم تعريف بناء جملة سطر السجل هذا في "
src / main / resources / log4j2.xml " باستخدام قالب مخصص:

يتم استخراج المتغيرات $ {...} من application.properties وخصائص النظام ، والتي يمكن عرضها على الصفحة على
http: // localhost: 8080 / env . ومع ذلك ، فإن جزء الكود الذي نحتاج إليه يقع مباشرة بعد الرسالة (٪ m).

كلمة "MULTIEXCEPTION" ليس لها معنى خاص ، إنها مجرد علامة سطر فريدة من خيارنا ، والتي تتيح لك معرفة أين تنتهي الرسالة (٪ m) ويبدأ الاستثناء. إذا كنت تريد ، يمكنك تركها.
ولكن بعد ذلك ، بدلاً من مجرد إدراج عنصر نائب٪ xException من شأنه أن يلقي تتبعًا مكدسًا كبيرًا بأحرف السطر الجديد ، فإننا نقوم بتحويل القيمة مع دالة٪ replace ، والتي تحل محل جميع أحرف السطر الجديد بالتعبير "\ u2028" ، وهو
محدد سلاسل يونيكود .
تعني إزالة الأحرف "\ n" من تتبع المكدس أنه سيتم الآن إرسال تتبع المكدس كسطر واحد. لإثبات ذلك ، انتقل إلى
http: // localhost: 8080 / error / throw ، حيث يوجد "
وحدة التحكم في الأخطاء" التي تعمد طرح NullPointerException بالشفرة التالية:

يؤدي هذا إلى إنشاء سطر سجل في وحدة التحكم ، كما هو موضح أدناه:

كما ترون ، هنا التعبير "u2028" يفصل ما كان بمثابة تغذية سطر في تتبع المكدس. الآن سيتم إرسال رسالة الاستثناء وتتبع المكدس كوحدة.
النتائج
تعني القدرة على طي تتبع الخطوط المتعددة لمكدس Java في سطر واحد أن هذه التقنية يمكن اعتبارها حلاً وحيدًا للتسجيل المركزي.
لا يوجد أي سبب لإهدار الموارد الحاسوبية والبشرية على استعادة تتبع المكدس على الجانب الوجهة باستخدام معرفات الارتباط ، وأحجام المكدس الكبيرة ، والاستفادة العالية من المعالج ، والتحليل الذكي إذا كان أكثر فعالية بكثير في أداء هذا الطي على جانب المصدر.
في هذه الحالة ، يمكن دائمًا استبدال حرف Unicode على جانب تجميع السجلات (على سبيل المثال ، على جانب خط الأنابيب لجمع سجلات Logstash وتصفيتها وتطبيعها) لاستعادة الرسالة بتنسيقها الأصلي.
المواد المرجعية
قليلا من الإعلان :)
شكرا لك على البقاء معنا. هل تحب مقالاتنا؟ تريد أن ترى المزيد من المواد المثيرة للاهتمام؟ دعمنا عن طريق تقديم طلب أو التوصية لأصدقائك
VPS المستندة إلى مجموعة النظراء للمطورين من 4.99 دولار ، وهو
تمثيلي فريد من الخوادم على مستوى الدخول التي اخترعناها لك: الحقيقة الكاملة حول VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps من 19 $ أو كيفية تقسيم الخادم؟ (تتوفر خيارات مع RAID1 و RAID10 ، ما يصل إلى 24 مركزًا وما يصل إلى 40 جيجابايت من ذاكرة DDR4).
Dell R730xd أرخص مرتين في مركز بيانات Equinix Tier IV في أمستردام؟ فقط لدينا
2 من Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6 جيجا هرتز 14 جيجا بايت 64 جيجا بايت DDR4 4 × 960 جيجا بايت SSD 1 جيجابت في الثانية 100 TV من 199 دولار في هولندا! Dell R420 - 2x E5-2430 سعة 2 جيجا هرتز 6 جيجا بايت 128 جيجا بايت ذاكرة DDR3 2x960GB SSD بسرعة 1 جيجابت في الثانية 100 تيرابايت - من 99 دولارًا! اقرأ عن
كيفية بناء البنية التحتية فئة باستخدام خوادم V4 R730xd E5-2650d تكلف 9000 يورو عن بنس واحد؟