2009-01-16 13 views
6

जहां मैं काम करता हूं हम वेब अनुप्रयोग लॉगिंग के लिए Log4j का उपयोग करते हैं। Log4j.jar अनुप्रयोग स्तर पर है, कंटेनर स्तर नहीं। हम एक दैनिक रोलिंग फ़ाइल एपेंडर का उपयोग कर रहे हैं। हमारी log4j.properties फ़ाइलें ऐप पैकेज नाम के आधार पर परिशिष्ट परिभाषित करती हैं, इसलिए हमारे एप्लिकेशन के पैकेज में केवल कक्षाएं और नीचे हमारे ऐप की लॉग फ़ाइल में लॉग इन हो जाते हैं।लाइब्रेरी कोड से एप्लिकेशन लॉग में लॉग इन करने के लिए रणनीतियां?

मेरे आवेदन में, मैं कुछ सहायक वर्गों के साथ हमारे ढांचे का विस्तार कर रहा हूं। ये कक्षाएं एप्लिकेशन के पैकेज में नहीं हैं, क्योंकि वे मेरे आवेदन के लिए विशिष्ट नहीं हैं और अंततः अन्य अनुप्रयोगों के उपयोग के लिए एक जार लाइब्रेरी में बनाई जाएंगी। इस वजह से, मेरे लॉगिंग स्टेटमेंट्स को मेरे एप्लिकेशन के एपेंडर द्वारा नहीं चुना जाता है, और इस प्रकार मेरे एप्लिकेशन की लॉग फ़ाइलों में लॉग इन नहीं किया जाता है।

मैं कक्षाओं का उपयोग कर आवेदन की लॉग फ़ाइल में लॉग इन करने के लिए अपने जार में कक्षाओं को अनुमति देना चाहता हूं। हालांकि, अगर मैं अपने क्लासनामों के आधार पर अपने एप्लिकेशन की log4j गुण फ़ाइल में एक एपेंडर बनाता हूं, तो मुझे संदेह है कि जब log4j.properties फ़ाइलों में समान वर्ग नामों के कारण एकाधिक अनुप्रयोग मेरे जार का उपयोग कर रहे हैं, तो केवल एक एप्लिकेशन लॉग फ़ाइल ही प्राप्त होगी जार के लॉगिंग स्टेटमेंट्स, और यह कि जार का उपयोग करके प्रत्येक एप्लिकेशन से सभी लॉगिंग स्टेटमेंट प्राप्त करेंगे। मुझे लगता है कि यह मामला है, क्योंकि हम लॉगर को पुनः प्राप्त करने के लिए एक स्थिर Logger.getLogger() कॉल का उपयोग कर रहे हैं।

मैं पहले जानना चाहता हूं कि मेरे डर वैध हैं या नहीं, यदि वास्तव में ऐसा होता है तो एक ही या अलग कंटेनर में कई वेब अनुप्रयोग एक साथ मेरे जार का उपयोग कर रहे हैं।

मैं यह भी जानना चाहूंगा कि "सीमाएं" हैं जिन पर यह व्यवहार बदलता है। उदाहरण के लिए, क्या यह समस्या इस बात पर निर्भर करती है कि log4j.jar एक कंटेनर-स्तरीय जार या ऐप-स्तरीय जार है, या यदि प्रत्येक कंटेनर एक अलग JVM में चल रहा है?

आखिरकार, यदि यह मामला है, तो मैं जानना चाहता हूं कि समस्या को दूर करने के लिए मुझे किन रणनीतियों का उपयोग करना चाहिए।

अग्रिम धन्यवाद!

+0

तुम क्या कर खत्म किया? –

उत्तर

2

अगर log4j.jar केवल वेब-ऐप में है तो लॉग अलग रहेंगे, इसलिए प्रत्येक वेब-ऐप में अपना लॉग 4j.jar और log4j.properties होना चाहिए ताकि सभी लॉग अलग रहें।

+0

भले ही log4j.properties फ़ाइलें दोनों मेरी लाइब्रेरी जार में उपयोग की जाने वाली कक्षाओं के लिए समान परिशिष्ट परिभाषित कर रहे हों? –

0

समस्या यह है कि log4j के लिए preffered पैटर्न स्थिर * कॉन्फ़िगरेटर विधियों का उपयोग करना है, जो अनुप्रयोग कंटेनरों के साथ बहुत अच्छी तरह से नहीं जाते हैं। जब मैं यह भर में आया था

यह article मेरे लिए इस समस्या का समाधान ...

संबंधित मुद्दे