additivity
संपत्ति को समायोजित करने का एक संभावित विकल्प आपके लॉगर्स को सबसे सामान्य से सबसे सामान्य से जांचना है। निम्नलिखित उदाहरण में, हम foo.bar.LoggingExampleClass में होने वाली किसी भी लॉग इवेंट के लिए कंसोल में डबल लॉगिंग देखने की अपेक्षा करेंगे। Foo.bar से अतिरिक्त कंसोल एपेंडर को निकालना सुरक्षित होगा।LoggingExampleClass लॉगर के रूप में यह पहले से ही रूट लॉगर द्वारा कवर किया गया है।
<Logger name="foo.bar.LoggingExampleClass" level="DEBUG">
<AppenderRef ref="Console" /> <!-- THIS APPENDER COULD BE REMOVED -->
<AppenderRef ref="FooBarPackageLogging" />
</Logger>
<Root level="WARN">
<AppenderRef ref="Console" />
<AppenderRef ref="MainLogFile" />
</Root>
दोनों additivity समायोजन दृष्टिकोण और एपेंडर समायोजन दृष्टिकोण दोनों के लिए ट्रेडऑफ हैं। Additivity को बंद करना अनजाने में एक वांछनीय जेनेरिक स्तर लॉगर के एपेंडर को इस्तेमाल होने से रोक सकता है। उपर्युक्त उदाहरण में, foo.bar.LoggingExampleClass लॉगर पर additivity="false"
प्रॉपर्टी को सेट करने का अर्थ यह होगा कि लॉगिंग ईवेंट रूट लॉगर में संदर्भित MainLogFile में जोड़ा नहीं जाएगा।
दूसरी तरफ, अभिभावक परिशिष्टों पर भरोसा करना समस्याग्रस्त हो सकता है यदि अभिभावक परिशिष्ट अधिक बारीक लॉगर्स पर प्रभाव की जांच किए बिना बदले जाते हैं। उदाहरण के लिए, मान लीजिए कि एक आवश्यकता है कि foo.bar.LoggingExampleClass लॉगिंग ईवेंट कंसोल पर लिखा जाना चाहिए। वे वर्तमान में additivity के कारण उपरोक्त उदाहरण कॉन्फ़िगरेशन में हैं, भले ही foo.bar.LoggingExampleClass लॉगर का कंसोल एपेंडर हटा दिया गया हो। हालांकि, अगर किसी भी अतिरिक्त समायोजन के बिना रूट लॉगर से कंसोल एपेंडर को भी हटा दिया गया था, तो आवश्यकता पूरी नहीं होगी।
यह कॉन्फ़िगरेशन समस्या या प्रारंभिक समस्या हो सकती है। आप लॉगर को कहां प्रारंभ करते हैं? क्या आप दो बार Logger.getLogger (SomeClass.class) को कॉल नहीं करते हैं? कुछ अतिरिक्त कोड हमें आपकी सहायता करने के लिए अधिक जानकारी दे सकते हैं। – MaSEL