2009-01-06 11 views
5

मेरे पास एक एपेंडर है कि मुझे केवल एक्स एक्स वर्ण (इस उदाहरण के लिए, हम 5 कहेंगे) प्रदर्शित करने के लिए संदेश चाहते हैं।Log4J संदेश को ट्रिम करना

मैं एक पैटर्न लयआउट का उपयोग कर रहा हूं लेकिन मुझे संदेश को सही तरीके से छीनने के लिए संदेश नहीं मिल रहा है।

उदाहरण के लिए, मेरी लॉग संदेश है अगर

जल्दी भूरी लोमड़ी

मैं सिर्फ देखना चाहते हैं:

क्ष

जब मैं इसे पैटर्न

में उपयोग करें

% .5m

मैं

n लोमड़ी

मिल जाएं, क्योंकि वे पिछले 5 पात्र हैं।

मैंने PattenLayout javadoc देखा है, लेकिन कुछ भी नहीं मिला। मुझे पता है कि यह पूरा संदेश नहीं देखना चाहता है, लेकिन इस विशिष्ट एपेंडर के लिए यह समझ में आता है। मैं एक अलग ऐपेंडर में पूरा संदेश लॉग करता हूं। यदि संभव हो तो मैं एक कस्टम वर्ग लिखने से बचना चाहूंगा।

उत्तर

6

डिफ़ॉल्ट रूप से एक संदेश की शुरुआत से छंटनी की जाती है (सी में printf से अलग है, जो इसे अंत से करता है)।

उचित पैटर्न होना चाहिए:

%.-5m 

संपादित करें:

मैं सिर्फ यह कोशिश की, और log4j कि पैटर्न पसंद नहीं है। हालांकि, आपूर्ति किए गए पैटर्न LOGBack में ठीक काम करेंगे, अगर आप स्विच कर सकते हैं। अगर आप अपने लॉगिंग प्रदाता को स्विच नहीं कर सकते हैं, तो आप लॉग 4j में एक-ऑफ संशोधन कर सकते हैं।

if(len > max) 
    sbuf.append(s.substring(len-max)); 

यह पढ़ना चाहिए:

if(len > max) 
    sbuf.append(s.substring(0,max)); 

आप बस संशोधन कर सकते हैं और जार पुनः संकलित कोड के दिलचस्प बिट लाइनों org.apache.log4j.helpers.PatternConverter की 75-76 पर दिखाई देता है आपके उपयोग के लिए, या आप उचित कटाव करने के लिए पैटर्न कनवर्टर को उपclass कर सकते हैं। इसके लिए PatternLayout के एक नए संस्करण की भी आवश्यकता होगी, जिसमें createPatternParser विधि शामिल है, जिसे आपको अपने सबक्लास में पैटर्न कनवर्टर के अपने नए संस्करण को तुरंत चालू करने के लिए ओवरराइड करने की आवश्यकता होगी।

एक साइड नोट के रूप में, अपने विशिष्ट प्रोजेक्ट में ओपन सोर्स कोड को संशोधित करने के लाइसेंसिंग विधियों से अवगत रहें।