سؤال

لديّ جهد لا أريد سوى أول حرف 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.

كملاحظة جانبية ، كن على دراية بتداعيات الترخيص لتعديل التعليمات البرمجية المصدر المفتوحة في مشروعك المحدد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top