2012-03-16 17 views
18

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

+0

वसंत ढांचे पर एक झांक लें। विशेष रूप से, निर्भरता इंजेक्शन क्षमता वह हिस्सा है जो आपके लिए सबसे उपयोगी है। – cdeszaq

उत्तर

23

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

उदाहरण के लिए यदि आप log4j उपयोग करते हैं लेकिन अपने पुस्तकालय का उपयोग कर डेवलपर का उपयोग करता logback वह एक log4j विन्यास फाइल और log4j जार शामिल करने के लिए है (या other measures लेने के लिए) अपने पुस्तकालय खुश करने के लिए होगा।

लॉगिंग Facades इस समस्या (अपाचे कॉमन्स लॉगिंग से) का समाधान:

जब एक पुस्तकालय यह जानकारी लॉग इन करने के बहुत उपयोगी है लेखन। हालांकि वहां कई लॉगिंग कार्यान्वयन हैं, और लाइब्रेरी एक संपूर्ण व्यक्ति के उपयोग को लागू नहीं कर सकती है जो लाइब्रेरी का हिस्सा है।

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

या SLF4J से तर्क:

जावा या (SLF4J) के लिए सरल लॉगिंग फसाड विभिन्न प्रवेश चौखटे, उदा के लिए एक सरल मुखौटा या अमूर्त रूप में कार्य करता java.util.logging, log4j और लॉगबैक, अंतिम उपयोगकर्ता को परिनियोजन समय पर इच्छित लॉगिंग फ्रेमवर्क में प्लग करने की इजाजत देता है।प्रवेश अग्रभाग के लिए

उम्मीदवार हैं:

व्यक्तिगत तौर पर मैं सिफारिश करेंगे SLF4J (Logback के साथ)।

+0

आपका उदाहरण भ्रामक है। डेवलपर एक ही समय में तीसरे पक्ष के लिए कोड और log4j एडाप्टर के लिए SLF4J API का उपयोग कर सकता है। फिर वह सिर्फ कुछ एसएलएफ 4 जे बैकएंड को लॉगबैक की तरह चुनता है। वास्तव में यह एसएलएफ 4 जे का एक कारण है, यह इतना आसान है। कोई log4j कॉन्फ़िगरेशन आवश्यक नहीं है। –

+0

@RostislavMatl क्या आप एसएलएफ 4 जे "ब्रिजिंग मॉड्यूल" (http://www.slf4j.org/legacy.html) के बारे में बात कर रहे हैं? ये आपको एक लाइब्रेरी का उपयोग करने की अनुमति देता है जो log4j का उपयोग करता है ... आंतरिक रूप से और इसके लॉग संदेशों को SLF4J पर रीडायरेक्ट करता है (जिसे लॉगबैक द्वारा समर्थित किया जा सकता है)। यदि आप लाइब्रेरी के उपयोगकर्ता हैं तो यह निश्चित रूप से एक शानदार विशेषता है। हालांकि जब आप लाइब्रेरी के डेवलपर हैं तो आपको अपने उपयोगकर्ताओं को ऐसे हुप्स से कूदने के लिए क्यों मजबूर होना चाहिए? एक मुखौटा का उपयोग क्यों न करें? चूंकि एसएलएफ 4 जे पृष्ठ बताता है कि ये समाधान "आपके नियंत्रण से परे सॉफ्टवेयर के लिए उपयुक्त" हैं। अगर मैंने आपको गलत समझा है तो कृपया मुझे सही करें। – Joe23

+0

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

2

लॉगिंग फ्रेमवर्क कॉन्फ़िगरेशन में, आपकी लॉग फ़ाइल का स्थान पैकेज के बाहर सेट किया गया है। कॉन्फ़िगरेशन फ़ाइल आमतौर पर क्लासपाथ पर होती है। यह कैसा दिखता है कि आप किस लॉगिंग फ्रेमवर्क का उपयोग करते हैं, इस पर निर्भर करता है - मैं SLF4J और Logback के साथ जाने की अनुशंसा करता हूं।

3

इस के लिए मानक समाधान हैं:

वे सब के सब आप कॉन्फ़िगर करने की अनुमति देगा कॉन्फ़िगरेशन के माध्यम से लॉग फ़ाइल स्थान।

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