سؤال
لديّ جهد لا أريد سوى أول حرف X (لهذا المثال ، سنقول 5) من الرسالة التي سيتم عرضها.
أنا أستخدم PatternLayout لكن لا يمكنني الحصول على الرسالة لاقتطاع الرسالة بشكل صحيح.
على سبيل المثال ، إذا كانت رسالة السجل الخاصة بي هي
الثعلب البني السريع
أريد فقط أن أرى:
س
عندما أستخدم هذا في النمط
٪ .5m
انا حصلت
ن الثعلب
لأن تلك هي آخر 5 أحرف.
لقد نظرت إلى باتنايوت Javadoc ، لكنها لم تجد أي شيء. أعلم أن هذا أمر غريب بعض الشيء لعدم الرغبة في رؤية الرسالة بأكملها ، ولكن بالنسبة لهذا الزائدة المحددة ، فمن المنطقي. أقوم بتسجيل الرسالة بأكملها في مجهد مختلف. أود تجنب كتابة فصل مخصص إن أمكن.
المحلول
يتم الاقتطاع من بداية الرسالة افتراضيًا (يختلف عن printf في C ، وهو ما يفعله من النهاية).
يجب أن يكون النمط الصحيح:
%.-5m
تعديل:
لقد جربت هذا للتو ، و log4j لا يحب هذا النمط. ومع ذلك ، فإن النمط المقدم سيعمل بشكل جيد في Logback ، إذا كنت تستطيع إجراء التبديل. إذا لم تتمكن من تبديل مزود التسجيل الخاص بك ، فيمكنك إجراء تعديل لمرة واحدة إلى Log4J. يظهر الجزء المثير للاهتمام من الكود على الأسطر 75-76 من org.apache.log4j.helpers.patternconverter:
if(len > max)
sbuf.append(s.substring(len-max));
هذا يجب أن يقرأ:
if(len > max)
sbuf.append(s.substring(0,max));
يمكنك ببساطة إجراء تعديل وإعادة ترجمة الجرة لاستخدامك ، أو يمكنك فئة Subcleass PatternConverter لأداء الاقتطاع المناسب. سيتطلب ذلك أيضًا إصدارًا جديدًا من PatternLayout ، والذي يحتوي على طريقة CreatePatternparser ، والتي ستحتاج إلى تجاوزها في فئتك الفرعية لتشكيل الإصدار الجديد من PatternConverter.
كملاحظة جانبية ، كن على دراية بتداعيات الترخيص لتعديل التعليمات البرمجية المصدر المفتوحة في مشروعك المحدد.