2011-02-27 10 views
5

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

मैं सोच रहा था कि मैं यह धागा द्वारा किसी भी तरह कर सकता है:

class Controller { 

public void action() { 
    setCurrentThreadLogFile(myLogFile); 
    try { 
    Library.stuff(); 
    } finally { 
    restoreCurrentThreadLogFile(); 
    } 
} 

} 

वर्तमान में मैं अपने खुद के प्रवेश के लिए कॉमन-लॉगिंग उपयोग कर रहा हूँ के रूप में अच्छी तरह से, बैकएंड के रूप में log4j साथ। लेकिन यदि आवश्यक हो, तो मैं इसे बदल सकता हूं, या मिश्रण का उपयोग कर सकता हूं (क्या यह कॉमन्स लॉगिंग फ्रेमवर्क के भीतर संभव है)।

एक तरीका यह मैं कर सकता हूं कि यह मेरे स्वयं के कॉमन्स लॉगिंग कार्यान्वयन (संभवतः log4j के आसपास एक रैपर) लिखना होगा, लेकिन क्या कोई मौजूदा समाधान है?

+0

क्या उम्मीदवार उन्मुख प्रोग्रामिंग आपके लिए एक विकल्प होगा? मुझे लगता है कि यह आपकी समस्या को सुन्दर तरीके से हल कर सकता है। –

उत्तर

2

शायद आप मैप किए गए डायग्नोस्टिक संदर्भ (एमडीसी) को देखना चाहते हैं। कॉमन्स लॉगिंग इन का समर्थन नहीं करता है लेकिन Log4J करता है, इसलिए आपको इसे सेट अप करने के लिए सीधे Log4J पर जाना होगा। आपको शायद एमडीसी का उपयोग करके फ़िल्टर करने के लिए अपना खुद का फ़िल्टर रोल करना होगा और परिशिष्टों पर आवेदन करना होगा।

यदि आप लॉगिंग कार्यान्वयन को बदलने के इच्छुक हैं तो आप लॉगिंग कार्यान्वयन के रूप में लॉगिंग मुखौटा और लॉगबैक के रूप में SL4J का उपयोग कर सकते हैं। नियंत्रक या किसी प्रकार का फ़िल्टर/इंटरसेप्टर MDC के साथ नियंत्रकों को भेदभाव करने के लिए उपयोग की जाने वाली कुंजी के लिए एक भेदभाव मूल्य जोड़ें। लॉग इवेंट को अलग फाइलों में अलग करने के लिए SiftingAppender का उपयोग करें।

+0

मैं संभवतः एसएलएफ 4 जे का उपयोग करने के लिए अपना खुद का लाइब्रेरी-प्रकार कोड बदल सकता हूं, लेकिन मेरे नियंत्रण में कोड के बारे में क्या है जो कॉमन्स लॉगिंग का उपयोग करता है? –

+0

एसएलएफ 4 जे विरासत एपीआई के लिए समर्थन है। यह अपने एपीआई का उपयोग करके लागू कॉमन्स लॉगिंग का कार्यान्वयन प्रदान करता है। आपको jcl-over-slf4j.jar के साथ कॉमन्स लॉगिंग जार को प्रतिस्थापित करने की आवश्यकता है। देखें [लिंक] (http://www.slf4j.org/legacy.html#jcl-over-slf4j)। – Will

+0

मैं स्पष्ट नहीं था। मुझे पता है कि एसएलएफ 4 जे में कॉमन्स लॉगिंग एडाप्टर है, लेकिन क्या यह एमडीसी के साथ काम करता है? इसका मतलब है कि यदि मैं किसी संदर्भ में लाइब्रेरी कोड का उपयोग करता हूं, तो लॉग आउटपुट सही फ़ाइल में समाप्त हो जाएगा? (मुझे पुस्तकालय कोड के भीतर एमडीसी को संपादित करने में सक्षम होने की आवश्यकता नहीं है)। –

1

प्रति थ्रेड एक लॉगर? लॉगर को ThreadLocal में रखें। यदि आप java.util.logging का उपयोग कर रहे हैं, तो Handler कॉलर को यह पारदर्शी बना सकता है।

+0

एक थ्रेडलोकल वास्तव में एक उपकरण है जिसका उपयोग मैं अपने स्वयं के कार्यान्वयन को लिखना चाहता हूं। मैं java.util.logging का उपयोग नहीं करता हालांकि, मैं इसे टॉमकैट में सही ढंग से कॉन्फ़िगर करने के लिए प्रबंधित नहीं कर सका। –

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