2010-11-29 17 views
13

प्राप्त मैं कोड log4j का उपयोग करता है, जो किसी दिए गए Logger के लिए logger प्राप्तलकड़हारा

static public Logger getLogger(String name) 

और

static public Logger getLogger(Class clazz) 
पूर्व एपीआई के साथ

का उपयोग कर देखा है के लिए getSimpleName() बनाम getName() का उपयोग करना getSimpleName() के साथ स्पष्ट रूप से पारित किया गया, जबकि उत्तरार्द्ध पास Class पर getName() का उपयोग करता है। क्या इन दोनों के बीच कोई अंतर है? अगर मैं log4j.properties फ़ाइल में विभिन्न स्तरों पर लॉग इन करने के लिए विभिन्न संकुल को कॉन्फ़िगर करता हूं तो क्या इससे प्रभावित होगा?

+0

पहले से ही उल्लिखित पोस्ट में शामिल है http://stackoverflow.com/q/15202997 – mhasan

उत्तर

2

यदि आप अलग-अलग पैकेजों में simpleName के साथ कई कक्षाएं हैं तो आप भ्रमित हो सकते हैं। एक ही नाम के साथ कई लॉगर्स होने की समस्या अन्यथा नहीं होनी चाहिए - बस भ्रमित हो सकता है।

20

हां एक बड़ा अंतर है।

मैं कभी भी simpleName का उपयोग Logger उदाहरण के लिए नहीं करता क्योंकि यह पैकेज नाम को स्ट्रिप्स करता है। समस्याएं होने के अलावा जब एक ही कक्षा का नाम दो अलग-अलग पैकेजों में मौजूद होता है (दोनों वर्गों को समान लॉगर इंस्टेंस प्राप्त होता है), तो आप लॉगर विरासत को नियंत्रित करने की क्षमता खो देते हैं।

उदा दो वालों के लिए:

com.foo.A 
com.foo.B 
गुण में

, मैं सिर्फ हो सकता है:

log4j.logger.com.foo=DEBUG,CONSOLE 
4

मैं पूरे नाम का उपयोग पसंद करते हैं (Class.getName())। जब पैकेज सही ढंग से व्यवस्थित होते हैं, तो यह जावा पैकेज पेड़ के विभिन्न हिस्सों से उत्पन्न विभिन्न लॉग संदेशों को संभालने के लिए log4j को ट्यून करने की अनुमति देता है।

उदाहरण के लिए, आप एक विशिष्ट एपेंडर का उपयोग करने के लिए "com.mycompany.infra" से शुरू होने वाले पैकेजों में आसानी से सभी वर्गों को कॉन्फ़िगर कर सकते हैं, और केवल WARN या ऊपर के स्तर को लॉग कर सकते हैं।

10

उदा। मेरी कक्षा ShapeDemo.java com.test पैकेज में रहता है, और मैंने नीचे कोड लिखा है।

System.out.println("Name-->"+ShapeDemo.class.getName()); 
System.out.println("SimpleName-->"+ShapeDemo.class.getSimpleName()); 

हो जाएगा ताकि उत्पादन

Name-->com.test.ShapeDemo 
SimpleName-->ShapeDemo 
3

निम्नलिखित this.getClass() का प्रयोग करना getName()।;

रिटर्न:। Alin.iwin.flickrbrowser.GetRawData

इस बीच

निजी स्ट्रिंग LOG_TAG = this.getClass() getSimpleName();

केवल लौटें: GetRawData।

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