2010-11-10 9 views
8

से एक वर्ग को शामिल न करें मैं एक log4j.properties फ़ाइल है कि कुछ इस तरह दिखता है:एक log4j appender

log4j.logger.com.foo=INFO, foo-log 
log4j.logger.com.foo.BarImpl=INFO, bar-log 

कक्षाएं कि com.foo के पैकेज संरचना मैं चाहेगा foo-log appender प्रयोग की जाने वाली मेल खाते के लिए आम तौर पर। हालांकि, उस पैकेज के भीतर, मैं BarImplbar-log एपेंडर का उपयोग करने के लिए लॉग चाहता हूं लेकिन foo-log एपेंडर नहीं। फिलहाल, BarImpl द्वारा लिखे गए किसी भी लॉग को foo-log और bar-log (अपेक्षित के रूप में) दोनों द्वारा नियंत्रित किया जाता है। BarImpl क्लास को अनदेखा करने के लिए मैं foo-log एपेंडर कैसे प्राप्त करूं?

उत्तर

13

log4j प्रलेखन से:

एक दिया लकड़हारा के लिए प्रत्येक सक्षम प्रवेश अनुरोध है कि लकड़हारा में सभी appenders के साथ-साथ appenders पदानुक्रम में करने के लिए भेजा जाएगा। दूसरे शब्दों में, परिशिष्ट को लॉगर पदानुक्रम से जोड़कर विरासत में मिलाया जाता है। उदाहरण के लिए, यदि रूट लॉगर में एक कंसोल एपेंडर जोड़ा जाता है, तो सभी सक्षम लॉगिंग अनुरोध कम से कम कंसोल पर प्रिंट करेंगे। यदि इसके अलावा एक लॉगर में फ़ाइल एपेंडर जोड़ा जाता है, तो सी कहें, फिर सी और सी के बच्चों के लिए लॉगिंग अनुरोध सक्षम करने के लिए फ़ाइल और कंसोल पर प्रिंट किया जाएगा। इस डिफ़ॉल्ट व्यवहार को ओवरराइड करना संभव है ताकि एडिएंडर संचय अब additivity ध्वज को गलत पर सेट करके additive नहीं है।

निम्न पंक्ति (या समान) के साथ प्रयोग करने का प्रयास करें:

log4j.additivity.com.foo.BarImpl = false