2010-04-09 10 views
7

Google guice का built-in logger binding है। लेकिन अगर मैं कॉमन्स-लॉगिंग या लॉग 4 जे लॉगर का उपयोग करना चाहता हूं तो क्या होगा?मैं एक कस्टम लॉगर इंजेक्ट करने के लिए Google guice कैसे प्राप्त करूं, एक कॉमन्स-लॉगिंग या log4j लॉगर

मैं द्वारा

LogFactory.getLog(CLASS.class) 

एक लॉग बनाया सुई guice मिल सकता है लेकिन इसके साथ ही व्यवहार में के रूप में निर्मित बाध्यकारी होने:

स्वचालित रूप से बाध्यकारी के नाम के लकड़हारा के नाम सेट वर्ग .. जो में लॉगर इंजेक्शन की जा रही है


क्या यह भी समझ में आता है? या चिल्लाओ मैं बस अंतर्निहित जावा लॉगर का उपयोग करता हूं? या इंजेक्शन के बिना कॉमन्स-लॉगिंग का उपयोग करें?

+0

नहीं, यह समझ में आता है। Log4j अधिक लॉगिंग स्तर का समर्थन करता है और इसमें अधिक उपलब्ध परिशिष्ट हैं, इसलिए बिल्टिन लॉगर के बजाय इसका उपयोग करना चाहते हैं, मुझे सही समझ मिलती है। –

उत्तर

11

गुइस विकी पर CustomInjections पृष्ठ का वर्णन करता है कि कक्षा द्वारा नामित लॉगर को इंजेक्शन देने के तरीके को कैसे इंजेक्शन दिया जाए।

+0

अच्छा लिंक। एक दर्दनाक प्रक्रिया की तरह, लेकिन फिर भी कार्यात्मक। –

+0

लिंक के लिए धन्यवाद। यह मेरे लिए काम किया। मैंने एसएलएफ 4 जे समाधान को लागू करने के लिए इस रणनीति का उपयोग किया। –

+3

उदाहरण के लिए इंजेक्शन लॉगर क्लास के बारे में उलझन में आने वाले सभी के लिए: बस अपनी परियोजना में "इंजेक्शन लॉगर" नामक एक खाली एनोटेशन क्लास बनाएं। यह बाहरी निर्भरता नहीं है (यही वह था जिसे मैंने पहले माना था)। –

1

यह आपकी पसंद है। मैंने विकी पर विस्तृत विधि का उपयोग करके गिसिस के साथ सफलतापूर्वक logback का उपयोग किया है।

sli4j प्रोजेक्ट पर एक नज़र डालें। यह उपयोगी हो सकता है।

0

गुइस एक इंटरफेस के विभिन्न कार्यान्वयन इंजेक्शन के लिए बहुत उपयोगी है। यहां कोई मामला नहीं है क्योंकि अलग-अलग लॉगिंग कार्यान्वयन में सभी अलग-अलग एपीआई हैं।

यदि आप इंटरफ़ेस के उपयोग के दौरान विकसित होने के दौरान बाद में वास्तविक लॉगिंग कार्यान्वयन का आदान-प्रदान करने में सक्षम होना चाहते हैं commons logging या slf4j

+0

हाइबरनेट एसएलएफ 4 जे का उपयोग करता है और मैंने बिना किसी समस्या के एक गिइस आधारित एप्लिकेशन में एकीकृत किया है, इसलिए मैं इसकी सिफारिश कर सकता हूं, हालांकि मैंने कॉमन्स लॉगिंग के साथ नहीं खेला है। –

0

हालांकि आपके द्वारा दी गई java.util.logging.Logger लकड़हारा ओवरराइड नहीं कर सकते, तो आप सिर्फ आप किसी भी अन्य वर्ग की तरह एक नया लकड़हारा बाँध:

bind(Log.class).to(LogFactory.getLog(YourClass)); // or toInstance(...); 

लेकिन, बनाने एक नामित लकड़हारा थोड़ा अधिक कठिन होने जा रहा है।

यदि आप Google गिइस कोड (u til.BinderImpl.java:87) के माध्यम से खोदते हैं तो आप देख सकते हैं कि वे इंजेक्शन वाले लॉगर के प्रत्येक इंस्टेंस के लिए एक अलग वर्ग नाम कैसे निर्दिष्ट करते हैं। हालांकि, मैंने यह जानकर पर्याप्त रूप से पर्याप्त जांच नहीं की है कि यह आसानी से पुन: उत्पन्न होता है या नहीं।

प्रदाता बनाने या किसी फैक्ट्री को इंजेक्ट करना संभव हो सकता है जिसे किसी भी तरह से संदर्भ तक पहुंच हो ताकि आप नामित लॉगर प्रदान कर सकें।

+0

मुझे यह समझ में नहीं आता है। यदि आप स्पष्ट रूप से बाइंडर में YourClass को परिभाषित करते हैं, तो आपको पूरे एप्लिकेशन के लिए समान कक्षा के लॉग मिलते हैं। –

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